您当前的位置: 站长圈 > 技术文章 > 网页前端 > js之字符串的操作及正则表达式

js之字符串的操作及正则表达式

来源:站长圈 作者:adminzzq 点击: 0
字符串操作的函数
1,charAt()方法可返回指定位置的字符。字符串中第一个字符的下标是 0
var str="日一二三四五六";
var d=new Date();
//alert(d.getDay());//获取星期,这个数字是从0开始的
alert('今天星期'+str.charAt(d.getDay()));//结果是弹出“今天星期三”(这是举例时的时间)
这个方法的意思就是在调用字符串里用索引值取出那个字符子串

2,charCodeAt()返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。字符串中第一个字符的下标是 0
var str="日一二三四五六";
var d=new Date();
//alert(d.getDay());//获取星期,这个数字是从0开始的
alert('今天星期'+str.charCodeAt(d.getDay()));//结果是弹出“今天星期19977”(这是举例时的时间)
这里的19977就是“三”这个字符的 Unicode 编码。

3,concat(str,str2,str,3......),方法用于连接两个或多个字符串。
str1+str2+str3+.....
concat() 方法将把它的所有参数转换成字符串,然后按顺序连接到字符串 stringObject 的尾部,并返回连接后的字符串。请注意,stringObject 本身并没有被更改。
提示:请注意,使用 " + " 运算符来进行字符串的连接运算通常会更简便一些。

4,fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串。它不能作为您已创建的 String 对象的方法来使用,因此它的语法应该是 String.fromCharCode(),而不是 myStringObject.fromCharCode()。
这个方法和charCodeAt()方法正好相反,我们刚刚知道“三”这个字符的 Unicode 编码是19977,那现在我们来验证一下到底对不对:
document.write(String.fromCharCode(19977));//结果是“三”

5,indexOf();方法可返回某个指定的字符串值在字符串中首次出现的位置。| lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。
str.indexOf(substr);
php里的:
strpos()
stripos()
if(navigator.userAgent.indexOf('Firefox')>=0){
alert('你使用的是火狐浏览器');
}else{
alert('你使用的是IE浏览器');
}
这个例子的意思是在浏览器对象(navigator)的用户代理属性(userAgent)的值里(如:Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1)能不能找到'Firefox'这个字符串,找到就返回子字符串在整个字符串里的位置,你可以输出一下document.write(navigator.userAgent.indexOf('Firefox'));结果在火狐里输出53,你可以数数看哦,ie里找不到那个字符串就输出-1,这样就能判断你用的浏览器是不是火狐浏览器。

6,match(); 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。stringObject.match(regexp)。返回值:存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。
<script type="text/javascript">
var reg=/(1\d{2})(\d{8})/g;
var mob="881310066399988abcd13100663999abcd";
alert(mob.match(reg));//结果是13100663999,13100663999
</script>
在全局检索模式下,match() 即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置

7,replace();方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。stringObject.replace(regexp/substr,replacement)。返回值是一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。
<script type="text/javascript">
var reg=/(1\d{2})(\d{8})/g;
var mob="881310066399988abcd13100663999abcd";
alert(mob.replace(reg,"路航网络培训"));//结果是88路航网络培训88abcd路航网络培训abcd
</script>

8,search();方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。stringObject.search(regexp)。返回值:stringObject 中第一个与 regexp 相匹配的子串的起始位置,如果没有找到任何匹配的子串,则返回 -1。
<script type="text/javascript">
var reg=/(1\d{2})(\d{8})/;
var mob="881310066399988abcd13100663999abcd";
alert(mob.search(reg));//结果是2,因为是索引值
</script>

9,slice(start,end)方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。stringObject.slice(start,end)截取调用者字符串,从start开始(包括start)到end结束(不包括end)中间的字符。如果没有第二个参数,截取到调用者的末尾。 | substring() 方法用于提取字符串中介于两个指定下标之间的字符。
先看一个参数的例子,从第6个(下标是从0开始的)就是“h”包括“h”一直到最后的所有字符串:
var str="Hello happy world!"
document.write(str.slice(6));//结果是happy world!
两个参数就是从第几个到第几个字符,下标从0开始,这里第6个是“h”包括“h”一直到第11个空格不包括空格的中间那段字符串:
var str="Hello happy world!"
document.write(str.slice(6,11));//结果是happy

10,split(sep);把调用者用sep所指定的字符串来分割为数组,返回分割后的结果一个字符串数组。
var str="a,b,c";
var arr=str.split(",");
//alert(typeof arr);//结果是object
console.log(arr[0]);//结果是a
console.log(arr[1]);//结果是b
console.log(arr[2]);//结果是c
console.log(arr[3]);//结果是undefined
上面这个例子说明了"a,b,c"这个字符串被split(",")方法用逗号分割后返回了一个数组,这个数组有3个值,没有第4个,那如果分割的字符串不在调用者里会怎么样呢?
var str="a,b,c";
var arr=str.split("x");
//alert(typeof arr);//结果是object
console.log(arr[0]);//结果是a,b,c
console.log(arr[1]);//结果是undefined
console.log(arr[2]);//结果是undefined
可以看见,输出的仍然是一个字符串数组,只是把整个字符串作为第一个值,而后面的值都是undefined

11,substr(start,length),方法可在字符串中抽取从 start 下标开始的指定数目的字符。
stringObject.substr(start,length) 返回的是一个新的字符串,包含从 stringObject 的 start(包括 start 所指的字符) 处开始的 length 个字符。如果没有指定 length,那么返回的字符串包含从 start 到 stringObject 的结尾的字符。
var str="Hello world!"
document.write(str.substr(3));//结果是lo world!
上面这个例子只有一个参数,意思是从第3个(下标是从0开始的)“l”开始到最后的字符串。
var str="Hello world!"
document.write(str.substr(3,7));//结果是lo worl
如果有两个参数,就是从第几个下标开始的多长的字符串,这里是从第3个下标“l”包括“l”往后数7个字符一直到
后面的“l”的字符串。

12,substring() 方法用于提取字符串中介于两个指定下标之间的字符。| slice(start,end)方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。重要事项:与 slice() 和 substr() 方法不同的是,substring() 不接受负的参数。

13,toLocaleLowerCase() 方法用于把字符串转换为小写。| toLowerCase() 方法用于把字符串转换为小写。

14.toLocaleUpperCase() 方法用于把字符串转换为大写。| toUpperCase() 方法用于把字符串转换为大写。


二,正则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。
如:必须是字母或者数字[a-zA-Z0-9]
正则表达式的声明:
/[a-z]*/;正则表达式的直接量。例:var reg=/[a-z]*/;
new RegEx(); 例:var reg1=new RegEx('/[a-z]*/');
1,元字符:
* : 0个或者多个。
? : 0个或者1个。
+ : 1个或者多个。

. : 除了换行符之外的所有字符。
\w: 字母,数字,下划线,汉字。 \W:不是字母,数字,下划线,汉字。
\s: 任意空白符 \S:不是空白符
\d: 数字 \D:非数字

\b:单词的边界 \B:不是单词的边界
^ :字符串的开始。
$ :字符串的结束。
{n} :n次
{n,}:至少n次。
{n,m}:从n到m次 .{3,8}

2,修饰符:[a]
i:不区分大小写
m:执行多行匹配
g:全局匹配。如果没有全局匹配,就只找到一个就不找了,全局匹配是有多少匹配多少

2,正则表达式的通用方法:
1,test()方法用于检测一个字符串是否匹配某个模式.RegExpObject.test(string)如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false。
var reg=/[a-z]*/;
if(reg.test("abc")){
alert(1);
}else{
alert(0);
}

2,exec() 方法用于检索字符串中的正则表达式的匹配。返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
<script type="text/javascript">
var reg=/(1\d{2})(\d{8})/;
var mob="881310066399988";
var arr=reg.exec(mob);
for(i in arr){
document.write(i+"\t:"+arr[i]+"
");

}
</script>
输出结果为:
0 :13100663999
1 :131
2 :00663999
index :2
input :881310066399988
这个数组里的东东多少啥意思呢?exec() 方法会返回数组元素和 length 属性,还返回两个属性,index和input。首先前面的0、1、2是一个数组的索引,
1)先看索引为0的13100663999是什么意思,虽然我们测试的数字是"881310066399988",但是真正匹配出来的字符串只有“13100663999”,因此索引为0的值就是与 正则表达式相匹配的文本。
2)为什么会有接下来索引为1·和2的两个值呢?因为我们的正则表达式是分成了两个组的,也就是有两个正则表达式的子表达式,索引为1的值是与第 1 个子表达式相匹配的文本,索引为2的值是与第 2 个子表达式相匹配的文本。
3)index 属性声明的是匹配文本的第一个字符的位置。就是匹配出来的数字13100663999在输入的数字881310066399988里匹配的第一个字符的位置,这里它是在88以后的第3个字符的地方才匹配的,所以索引为2。
4)input :881310066399988就好理解啦,就是你测试的是什么字符串就是原原本本的样子。


下面做一个实例。
<script type="text/javascript">
var reg=/^0?1\d\d\d\d\d\d\d\d\d\d$/;
var mob="13100663999";
if(reg.test(mob)){
alert("手机号正确");
}else{
alert("你瞎写,这根本不是手机号");
}
</script>
这是一个检测手机号是不是书写正确的正则。首先,一个正确的手机号有这样一些规则:第一个数字0可有可无,第二个数字必须是1,剩下的10个都必须是数字而且数量只能是10个
分析/^0?1\d\d\d\d\d\d\d\d\d\d$/:
//:是正则表达式的格式
^:开头
0?:0就是数字0,?就是零个或者1个,就是说可以没有,可以是0
1:就是只能是1
\d:就是数字,写一个表示1个,写10个表示10个数字
$:结尾
你可以测试一下这些是手机号吗?“013100663999”、“313100663999”、“131006639998”、“73100663999”

上面\d\d\d\d\d\d\d\d\d\d/这一大堆能不能有更简便的方法呢?当然有:
var reg=/^0?1\d{10}$/;
这里的{n}就表示具体指定多少个,多少个什么?前面的\d数字,\d{10}表示10个数字