- 浏览: 1344552 次
- 性别:
- 来自: 湖南澧縣
-
文章分类
最新评论
-
虾米小尹:
不行啊!2.2-0.25=1.9500000000000002 ...
JavaScript浮点数运算 —— 精度问题 -
heluping000000:
引用String a= "abc",首先在 ...
String,到底创建了多少个对象? -
mack:
谢谢分享matcher.appendReplacement(s ...
string.replaceAll()中的特殊字符($ \)与matcher.appendReplacement -
wzt3309:
完全理解,比网上其他资料都要详细
String,到底创建了多少个对象? -
u014771876:
Java中十六进制转换 Integer.toHexString()
支持正则表达式的 String 对象的方法
stringObject.search (regexp )
用于检索字符串中指定的子字符串,或检索与正则表达式 相匹配的子字符串。
返回stringObject 中第一个与 regexp 相匹配的子串的起始位置。如果没有找到任何匹配的子串,则返回 -1。
说明:search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置 。
stringObject.replace (regexp,replacement )
第一个参数可以是字符串,也可以是正则式。
如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串 。否则,它只替换第一个匹配子串。
replacement 可以是字符串,也可以是函数。
replacement 中的 $ 字符具有特定的含义。如下表所示:
字符 |
替换文本 |
$1 、 $2 、 ... 、 $99 |
与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。 |
$& |
与 regexp 相匹配的子串。 |
$` |
位于匹配子串左侧的文本。 |
$' |
位于匹配子串右侧的文本。 |
$$ |
直接量符号。 |
注意:ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。
var str = '1234'; var regExp = /((\d{2})(\d{2}))/g; function replaceFun(){ for(var i = 0; i < arguments.length; i++){ //依次打印:1234 1234 12 34 0 1234 alert(arguments[i]); } } str.replace(regExp,replaceFun);
//----------------------------------------stringObject.replace() function testStringRep(){ //--replace all spaces var str = ' 32 '; alert(str.replace(/^\s*(.*?)\s*$/, "$1")); //32 //--双引号换成单引号 str = '"a", "b"'; alert(str.replace(/"([^"]*)"/g, "'$1'")); //'a','b' //--互换 str = "Doe, John"; alert(str.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1"));//John Doe //--首字母大写,转换采用函数 str = 'hello world'; alert(str.replace(/\b\w+\b/g, function(word){ return word.substring(0,1).toUpperCase()+word.substring(1);} ));//Hello World //--'$ \'替换成'\ $' /*java中 '$ \' 转 '\ $':因为\与$在替换时有特殊意思,$是引用捕获组, 而\则又是转义$用的,所以如果要替换\需要用'\\\\'代替,$用'\\$'代替 但javascript好像不需要 String str = "$ \\"; System.out.println(str.replaceAll("\\$(\\W)\\\\", "\\\\$1\\$")); */ str = '$ \\'; alert(str.replace(/\$(\W)\\/,'\\$1$'));//\ $ //-- $& str = "1,2"; alert(str.replace(/\d+/g,'$&$&'));//11,22 //-- $` $' str = "Doe John"; alert(str.replace(/(\W)+/,"$'$1$`"));//DonJohn DonJohn //-- $$ (只用一个也是可以的) str = "?"; alert(str.replace(/\?/,'$$'));//$ //--去掉粗暴的单词并用相同个数*替换 var str = 'fuck you, fuck a duck, sex '; alert(str.replace(/fuck|sex/g, function(word){ return word.replace(/./g,'*');} ));//**** you, **** a duck, *** } testStringRep();
stringObject.split (separator,howmany )
参数 |
描述 |
separator |
必需。字符串或正则表达式,从该参数指定的地方分割 stringObject 。 |
howmany |
可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。 |
var str="How are you doing today?" document.write(str.split(" ") + "<br />") document.write(str.split("") + "<br />") document.write(str.split(" ",3)) /* How,are,you,doing,today? H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,? How,are,you */ //把单词分割为字母,或者把字符串分割为字符 "hello".split("") //可返回 ["h", "e", "l", "l", "o"] //只需要返回一部分字符,请使用 howmany 参数 "hello".split("", 3) //可返回 ["h", "e", "l"]
如果 separator 是包含子表达式的正则表达式,那么返回的数组中包括与这些子表达式匹配的字串(但不包括与整个正则表达式匹配的文本)。
如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。
stringObject.match (regexp )
match() 方法将检索字符串 stringObject,以找到一个或多个与 regexp 匹配的文本。这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。
如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配,并返回结果数组 。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。 除了这些常规的数组元素之外,返回的数组还 含有两个对象属性。index 属性存储的是匹配文本的起始字符在 stringObject 中的位置,input 属性存储的是对 stringObject 的引用 。
function testStringMatch(){ var str = "aabbccddeeffgghh"; //不加全局标示g时 var regexp = /(([a-z]{2})([a-z]{2}))/; //第一次匹配 var arr = str.match(regexp); /* 此属性为IE、FireFox标准属性,但是IE输出4、fireFox输出0, IE不是太标准,因为此非全局正则式,所以应该为0 */ alert(regexp.lastIndex); for(name in arr){ alert('arr[' + name + ']='+ arr[name]); } /*输出: arr[input]=aabbccddeeffgghh arr[index]=0 arr[lastIndex]=4//注:FireFox上运行时返回数组没有此属性(非标准属性),IE上有 arr[0]=aabb//数组的0元素包含了完整的匹配, arr[1]=aabb//而第1到n元素中包含的是匹配中出现的任意一个子匹配。个数为括号数量 arr[2]=aa arr[3]=bb */ alert('------------------'); //match()方法执行后会更新RegExp对象,RegExp.$1..9 ,此静态属性也为标准属性,一般浏览都有 alert('RegExp.$1 = ' + RegExp.$1);//aabb alert('RegExp.$2 = ' + RegExp.$2);//aa alert('RegExp.$3 = ' + RegExp.$3);//bb alert('------------------'); //第二次匹配 arr =str.match(regexp); //可以看出还是从头开始匹配的 alert(regexp.lastIndex);//4 for(name in arr){ alert('arr[' + name + ']='+ arr[name]); } /*输出:注,match()方法每次会从头匹配,而不管是否有G标示 arr[input]=aabbccddeeffgghh arr[index]=0 arr[lastIndex]=4 arr[0]=aabb arr[1]=aabb arr[2]=aa arr[3]=bb */ alert('RegExp.$1 = ' + RegExp.$1);//aabb alert('RegExp.$2 = ' + RegExp.$2);//aa alert('RegExp.$3 = ' + RegExp.$3);//bb } testStringMatch();
如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串 。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与非全局匹配不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性,但在IE上测试还是有,fireFox上没有这两个属性 。
注意:在全局检索模式下,match() 即不提供与子表达式匹配的文本的信息,也不存储每个匹配子串的位置。如果您需要这些全局检索的信息,可以使用 RegExp.exec()。
G标示对stringObject.match()匹配没有影响,第二次匹配时还是从字符串的第一个字符开始匹配 。在IE中 只是 匹配后修改正则式的lastIndex属性值。
function testStringMatchG(){ var str = "aabbccddeeffgghh"; //加全局标示g时 var regexp = /(([a-z]{2})([a-z]{2}))/g; //第一次匹配 var arr = str.match(regexp); //IE 输出:16 ,为最后一个匹配字符的下一位置 //FireFox还是输出:0,即string.match(全局正则式)不影响正则式对象的lastIndex alert('first -- ' + regexp.lastIndex); for(name in arr){ alert('arr[' + name + ']='+ arr[name]); } /*输出:注,在firFox上返回数组中没有input、index、lastIndex项。 arr[input]=aabbccddeeffgghh arr[index]=12 arr[lastIndex]=16 arr[0]=aabb//全局正则式返回数组的第一个元素为第一个子表达 //式匹配的值,而不像非全局正则式那样存储完全匹配项 arr[1]=ccdd arr[2]=eeff arr[3]=gghh */ alert('------------------'); //match()方法执行全局正则式后,RegExp.$1..9存储的为最后一次匹配各子表达项的值 alert('RegExp.$1 = ' + RegExp.$1);//gghh alert('RegExp.$2 = ' + RegExp.$2);//gg alert('RegExp.$3 = ' + RegExp.$3);//hh alert('------------------'); //IE输出:16 firFox输出 0 alert('second -- '+regexp.lastIndex); //第二次匹配时,但还是从第一个字符开始, arr = str.match(regexp); //IE输出:16 firFox输出 0 alert('third -- '+regexp.lastIndex); for(name in arr){ alert('arr[' + name + ']='+ arr[name]); } /*输出:注,在firFox上返回数组中没有input、index、lastIndex项。 arr[input]=aabbccddeeffgghh arr[index]=12 arr[lastIndex]=16 arr[0]=aabb //注,还是从头重新匹配 arr[1]=ccdd arr[2]=eeff arr[3]=gghh */ alert('RegExp.$1 = ' + RegExp.$1);//gghh alert('RegExp.$2 = ' + RegExp.$2);//gg alert('RegExp.$3 = ' + RegExp.$3);//hh } testStringMatchG();
总之,G标示不会影响每次匹配的开始位置(按标准也不会影响正则式对象的lastIndex属性,但在IE下却影响了),不管是否有G标示,每次还是从字符开头起匹配,G标示只是影响返回的结果数组所在存储的信息,如果是非全局匹配,则只会匹配一次,并且返回的数组会结果数组中除第0个为整匹配项外,从索引为1开始的数组元素存储的为各子匹配式所匹配的值,数组个数为分组的个数;如果是全局匹配,则会搜索整个字符串,找出所有与整个表达式匹配的各个匹配项,此时返回的结果数组每个元素存储的值为每次找到的整体匹配项的值,且从数组第0个元素开始。还有一点就是IE与Firefox上不同的是,不管是否是全局匹配,IE上返回的结果数组中都存储了input、index、lastIndex属性的值,但在全局匹配模式下Firefox上没有这三个属性,但在非全局匹配模式下有input与index属性却没有lastIndex。
RegExpObject.lastIndex
该属性存放一个整数,它存储的是上一次匹配文本之后的第一个字符的位置。
上次匹配的结果是由方法RegExp.exec()和RegExp.test()(注,IE上的String对象的match()方法也会影响,但Firefox上不会影响该正则式对象属性)找到的,它们都以lastIndex属性所指的位置作为下次检索的起始点。这样,就可以通过反复调 用这两个方法来遍历一个字符串中的所有匹配文本。
该属性是可读可写的。只要目标字符串的下一次搜索开始,就可以对它进行设置。当方法exec()或test()再也找不到可以匹配的文本时,它们会自动把lastIndex属性重置为0。
重要事项:不具有标志g和不表示全局模式的RegExp对象不能使用lastIndex属性
。
提示:如果在成功地匹配了某个字符串之后就开始检索另一个新的字符串,需要手动地把这个属性设置为0,除非重新构造另一新的正则式。
function testRegExpLastIndex(){ var str = "The rain in Spain stays mainly in the plain"; var regexp = new RegExp("ain", "g"); alert(regexp.test(str));//true //Match found. index now at: 8 alert("Match found. index now at: " + regexp.lastIndex); //ain alert(regexp.exec(str)); //Match found. index now at: 17 alert("Match found. index now at: " + regexp.lastIndex); } testRegExpLastIndex();
RegExp 对象的方法
RegExpObject.exec (string )
exec() 方法的功能非常强大,它是一个通用的方法,而且使用起来也比 test() 方法以及支持正则表达式的 String 对象的方法更为复杂。
如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。除了数组元素和 length 属性之外,exec() 方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。我们可以看得出,在调用非全局的 RegExp 对象的 exec() 方法时,返回的数组与非全局正则式下调用方法 String.match() 返回的数组是相同的 。
function testExec(){ var str = "aabbccdd"; //var arr = str.match(/[a-z]{2}/); //不加全局标示g时 var regexp = /(([a-z]{2})([a-z]{2}))/; //第一次匹配 var arr =regexp.exec(str); /* 此属性为IE FireFox的标准属性 但是IE输出4 fireFox输出0 , 输出0是因为为非全局正则式,如果是全局的将会输出4, */ alert(regexp.lastIndex ); for(name in arr){ alert('arr[' + name + ']='+ arr[name]); } /*输出: arr[input]=aabbccdd arr[index]=0 arr[lastIndex]=4//注:FireFox上运行时返回数组没有此属性(非标准属性),IE上有 arr[0]=aabb//数组的0元素包含了完整的匹配, arr[1]=aabb//而第1到n元素中包含的是匹配中出现的任意一个子匹配。个数为括号数量 arr[2]=aa arr[3]=bb */ //exec方法执行后会更新RegExp对象,RegExp.$1..9 ,为正则式静态标准属性 alert('RegExp.$1 = ' + RegExp.$1);//aabb alert('RegExp.$2 = ' + RegExp.$2);//aa alert('RegExp.$3 = ' + RegExp.$3);//bb alert('------------------'); //第二次匹配 arr =regexp.exec(str); //IE上输出4,Firefox输出0 alert(regexp.lastIndex ); for(name in arr){ alert('arr[' + name + ']='+ arr[name]); } /*输出:因为正则式未加上全局标示g,所以第二匹配时还是从0开始 arr[input]=aabbccdd arr[index]=0 arr[lastIndex]=4//注:FireFox上运行时返回数组没有此属性(非标准属性),IE上有 arr[0]=aabb arr[1]=aabb arr[2]=aa arr[3]=bb */ alert('------------------'); //exec方法执行后会更新RegExp对象,RegExp.$1..9 ,为正则式静态标准属性 alert('RegExp.$1 = ' + RegExp.$1);//aabb alert('RegExp.$2 = ' + RegExp.$2);//aa alert('RegExp.$3 = ' + RegExp.$3);//bb } testExec();
但是,当 RegExpObject 是一个全局正则表达式时 ,exec() 的行为就稍微复杂一些。它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string 。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置 。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。
function testExecG(){ var str = "aabbccdd"; //加全局标示g时 var regexp = /(([a-z]{2})([a-z]{2}))/g; //第一次匹配 var arr =regexp.exec(str); //IE FireFox都有此标准属性,都输出:4 alert(regexp.lastIndex); for(name in arr){ alert('arr[' + name + ']='+ arr[name]); } /*输出: arr[input]=aabbccdd arr[index]=0 arr[lastIndex]=4//非标准属性,Firefox上还是没有 arr[0]=aabb//全局正则式返回数组的第一元素还是存储的整体匹配结果 arr[1]=aabb arr[2]=aa arr[3]=bb */ alert('RegExp.$1 = ' + RegExp.$1);//aabb alert('RegExp.$2 = ' + RegExp.$2);//aa alert('RegExp.$3 = ' + RegExp.$3);//bb alert('------------------'); //第二次匹配 arr =regexp.exec(str); //IE FireFox都输出:8 alert(regexp.lastIndex); for(name in arr){ alert('arr[' + name + ']='+ arr[name]); } /*输出:因为有全局标示g,所以从lastIndex开始匹配 arr[input]=aabbccdd arr[index]=4 arr[lastIndex]=8//非标准属性,Firefox上还是没有 arr[0]=ccdd arr[1]=ccdd arr[2]=cc arr[3]=dd */ alert('RegExp.$1 = ' + RegExp.$1);//ccdd alert('RegExp.$2 = ' + RegExp.$2);//cc alert('RegExp.$3 = ' + RegExp.$3);//dd } testExecG();
重要事项:如果在一个字符串中完成了一次模式匹配之后要开始检索新的字符串,就必须手动地把 lastIndex 属性重置为 0。
提示:请注意,无论 RegExpObject 是否是全局模式,exec() 都会把完整的细节添加到它返回的数组中。这就是 exec() 与 String.match() 的不同之处,后者在全局模式下返回的信息要少得多。因此我们可以这么说,在循环中反复地调用 exec() 方法是唯一一种获得全局模式的完整模式匹配信息的方法 。
调用 正则式对象的 exec()时, g标示只影响正则式的lastIndex属性,带与不带g两种方法返回的数组结果都是一样,都会存储匹配的完整细节信息。
//使用exec查找出所有匹配项时,需循环使用全局正则式进行匹配 function testExecMatchAll(){ var src = "The rain in Spain falls mainly in the plain."; var re = /\w+/g;//找出所有匹配时一定要加上全局标示g var arr; while ((arr = re.exec(src)) != null) alert(arr[0]); }
RegExpObject.test (string )
test() 方法用于检测一个字符串是否匹配某个模式。
//test()非全局正则式测试 function testRegExpTest(){ var str = "aabbccdd"; //不加全局标示g时 var regexp = /(([a-z]{2})([a-z]{2}))/; //第一次匹配 alert(regexp.test(str));//true /* IE FireFox都有此标准属性 但是IE输出4 fireFox输出0 , 输出0是因为为非全局正则式,如果是全局的将会输出4, */ alert(regexp.lastIndex ); alert('------------------'); //test方法执行后会更新RegExp对象,RegExp.$1..9 ,为标准属性 alert('RegExp.$1 = ' + RegExp.$1);//aabb alert('RegExp.$2 = ' + RegExp.$2);//aa alert('RegExp.$3 = ' + RegExp.$3);//bb alert('------------------'); //第二次匹配 alert(regexp.test(str));//true //IE输出4,Firefox输出0 alert(regexp.lastIndex ); alert('------------------'); //IE上的test()尽管受lastIndex影响,但非全局正则式,所以还是从头匹配 alert('RegExp.$1 = ' + RegExp.$1);//aabb alert('RegExp.$2 = ' + RegExp.$2);//aa alert('RegExp.$3 = ' + RegExp.$3);//bb } testRegExpTest();
调用正则式对象的test()方法时,g标示影响正则式的lastIndex属性,而且一下次匹配的位置从lastIndex属性的值开始。
//test()全局正则式测试 function testRegExpTestG(){ var str = "aabbccdd"; //加全局标示g时 var regexp = /(([a-z]{2})([a-z]{2}))/g; //第一次匹配 alert(regexp.test(str));//true //IE FireFox都会输出4 alert(regexp.lastIndex ); alert('------------------'); //test方法执行后会更新RegExp对象,RegExp.$1..9 ,为标准属性 alert('RegExp.$1 = ' + RegExp.$1);//aabb alert('RegExp.$2 = ' + RegExp.$2);//aa alert('RegExp.$3 = ' + RegExp.$3);//bb //第二次匹配 alert(regexp.test(str));//true //IE FireFox都会输出8 alert(regexp.lastIndex ); alert('------------------'); //test()方法受全局标示g影响,第二次匹配的位置为上次匹配位置后面。 alert('RegExp.$1 = ' + RegExp.$1);//ccdd alert('RegExp.$2 = ' + RegExp.$2);//cc alert('RegExp.$3 = ' + RegExp.$3);//dd } testRegExpTestG();
正则式的test()方法返回布尔型,一般用于完全匹配或者是验证是否含有其他非法字符。而exec()方法返回所有匹配结果,包括子表达式,一般除用于验证是否含有非法字符外,还用于查找出字符串所有匹配项。
function testRegExpMethod(){ //----test match var regexp = /^(\d{2})+$/; var str = '123456'; //test -- match if(regexp.test(str)){ alert('test -- match'); }else{ alert('test -- no match'); } //test()方法执行后也会更新RegExp对象,RegExp.$1..9 ,为标准属性 alert('RegExp.$1 = ' + RegExp.$1);//56 //----test valid regexp = /[\/\\]/; str = '123/45\\6'; //test -- invalid if(regexp.test(str)){ alert('test -- invalid'); }else{ alert('test -- valid'); } //----exec invalid char regexp = /[\/\\]/g; str = '123/45\\6'; var resultArr = regexp.exec(str); if(resultArr != null){ alert('exec -- invalid'); } //exec invalid char -- / //exec invalid char -- \ while(resultArr != null){ alert('exec invalid char -- ' + resultArr[0]); resultArr = regexp.exec(str); } }
其他测试:
/* * RegExpObject.lastIndex自动清零测试 */ function testResetLastIndex(){ var str = "a+"; //一定要加上全局标示G,否则每次匹配都会从头开始,测试没有意思 var regexp = /a/g; alert(regexp.exec(str));//a alert(regexp.lastIndex);//1 alert(regexp.exec(str));//null 未匹配到 alert(regexp.lastIndex);//0 未匹配到时自动清零 alert('------------------'); regexp = /a/g; alert(regexp.test(str));//true alert(regexp.lastIndex);//1 alert(regexp.test(str));//false 未匹配到 alert(regexp.lastIndex);//0 未匹配到时自动清零 alert('------------------'); regexp = /a\+/g; alert(regexp.exec(str));//a+ alert(regexp.lastIndex);//2 当全部匹配后,lastIndex不会清零,除非下次未匹配后开始 alert(regexp.exec(str));//null 因为第一次就完全匹配了,所以第二次未匹配到 alert(regexp.lastIndex);//0 第二次未匹配到时自动清零 alert(regexp.exec(str));//a+ //清零后第三次继续从头开始重新匹配 alert(regexp.lastIndex);//2 alert('------------------'); regexp = /a\+/g; alert(regexp.test(str));//true alert(regexp.lastIndex);//2 alert(regexp.test(str));//false 未匹配到 alert(regexp.lastIndex);//0 未匹配到时自动清零 } testResetLastIndex();
/* * exec方法返回数组中存储的子表达式匹配项个数问题测试 */ function testMatchArr(){ var str = "aabbccdd"; var regexp = /(([a-z]{2}){2})/;//注:这里是两个子表达式,而不是三个,量词对子表达式不起作用 var arr =regexp.exec(str); alert(arr[0]);//aabb 注:不管正则式是否加上了全局标示g,第一个元素都是全匹配串 alert(arr[1]);//aabb 从第二个数组元素开始,存放与括号顺序号模式匹配的串 alert(arr[2]);//bb 注意:([a-z]{2}){2}匹配aabb中的bb,而不是aa alert('------------------'); //exec方法执行后会更新RegExp对象,RegExp.$1..9 ,为标准属性 alert('RegExp.$1 = ' + RegExp.$1);//aabb alert('RegExp.$2 = ' + RegExp.$2);//bb 注:这里与arr[2]是一样的,不会输出aa alert('RegExp.$3 = ' + RegExp.$3);//什么也不输出,因为只有两个子表达式 alert('------------------'); regexp = /[a-z]{2}/; arr = regexp.exec(str); alert(arr[0]);//aa alert(arr[1]);//undefied 如果正则试中没有括号子表达式,则返回结果数组只有一个元素 alert('------------------'); regexp = /[a-z]{2}/g; arr = regexp.exec(str); /* 加上全局标示g的正则式只是影响exec下一次匹配的开始位置,而不像String对象的match, 会找出所有匹配的串。如果要用exec方法匹配出所有串,则要使用带g标示的正则式进行多 次匹配。 */ alert(arr.length);//1 alert(arr[0]);//aa }
发表评论
-
HTML、JS、JSON特殊字符
2010-12-13 23:47 25914JS到HTML特殊字符转换 这几天做项目,发现从服务器端以J ... -
HTML — HTTP URL 中的特殊字符
2009-10-31 18:16 33501. + URL中的+号表示空格 ... -
HTML — CSS选择器
2009-10-25 21:11 2219一个样式规则由两部分组成:选择器和样式声明。选择器表明要为哪一 ... -
部分解决JsUnit无法在firefox3、safari 测试的问题
2009-10-25 07:03 1465在上一篇中出现了一个问题,就是用 jsunit2.2alpha ... -
JsUnit——eclipse插件(四)
2009-10-25 06:59 2478这节我们来看看如何通过JsUnit插件来运行前几节所测试过的测 ... -
10、JavaScript跨浏览器需注意的问题——ajax基础笔记
2009-10-21 22:19 1402向表中追加行 创建表格行时,我们要把创建的 tr 追加到 t ... -
JsUnit详解——Web服务方式(三)
2009-10-21 00:21 2486上两节提到过以Web方式来运行JsUnit,不过不是很详细,这 ... -
JsUnit详解——《ajax基础》笔记(二)
2009-10-20 22:38 2581使用标准/定制查询串 如此说来,测试运行工具是很强大的,但是 ... -
JsUnit详解——《ajax基础》笔记(一)
2009-10-20 19:57 2658JsUnit与JUnit对比 JsUnit也有setUp() ... -
使用Firefox的Web开发插件
2009-10-18 17:53 1492Firefox的Web开发插件为Firefox浏览器增加了大量 ... -
9、访问WEB服务(REST)——ajax基础笔记
2009-10-18 17:24 4080最其名的WEB服务实现是S ... -
8、读取响应头部——ajax基础笔记
2009-10-18 17:20 6784你有时可能需要从服务器获取一些内容,例如,可能想“ping”一 ... -
7、使用JSON向服务器发送数据——ajax基础笔记
2009-10-18 17:20 5262看过前面的例子后(使用XML向服务器发送复杂的数据结构),你可 ... -
6、请求参数作为XML发送——ajax基础笔记
2009-10-18 17:20 1828如果只是使用一个包含 名/值 对的简单查询串,这可能不够健壮, ... -
4、将使用W3C DOM动态生成页面——ajax基础笔记
2009-10-18 17:19 1488使用W3C DOM动态生成页面 dynamicContent ... -
3、将响应解析为XML——ajax基础笔记
2009-10-18 17:18 1089将响应解析为XML parseXML.xml清单: < ... -
2、使用innerHTML属性创建动态内容——ajax基础笔记
2009-10-18 17:17 1983使用innerHTML属性创建动态内容 如果结合作用HTML ... -
1、使用XMLHttpRequest对象——ajax基础笔记
2009-10-18 17:17 2046XMLHttpRequest最早是在 IE5 中以active ... -
30、JavaScript代码优化
2009-10-16 21:25 1633JavaScript代码的速度被分成两部分:下载时间和执行速度 ... -
JavaScript代码优化(二)
2009-10-16 01:32 1221◆字符串的使用 在IE6和IE7中因字符串级联导致的主要问题 ...
相关推荐
### JavaScript正则表达式详解 #### 一、正则表达式基础 正则表达式(Regular Expression)是一种用于处理字符串的强大工具,它由一系列字符和特殊符号组成,用于描述一个字符串集的模式。在JavaScript中,正则...
### JS正则表达式详解及实用案例 #### 一、正则表达式基础概念 正则表达式(Regular Expression)是一种强大的文本处理工具,能够帮助我们实现字符串的搜索与替换等操作。在JavaScript中,正则表达式广泛应用于...
### JS正则表达式详解:理解与应用 #### 引言 正则表达式是文本处理领域的一个强大工具,尤其在JavaScript(JS)中,它被广泛用于数据验证、搜索和替换等操作。本文将深入解析JS正则表达式的基本语法、特性以及几个...
JavaScript中的正则表达式是一种强大的文本处理工具,用于匹配、查找、替换等操作。它们是按照特定模式匹配字符串的规则集合。以下是对给定代码中涉及的一些正则表达式模式的详细解释: 1. `isDigit(s)`:这个函数...
### JavaScript的正则表达式详解 正则表达式在JavaScript中是一种非常强大的工具,用于文本字符串的模式匹配、搜索和替换。它可以帮助开发者快速而准确地处理字符串数据,实现复杂的数据验证和格式化任务。本文将...
JavaScript正则表达式是编程语言中用于处理文本模式匹配的重要工具,它在JavaScript中广泛用于数据验证、字符串搜索和替换等功能。以下是对JavaScript正则表达式的详细解析: 1. **正则表达式基础**: - `/pattern...
### JavaScript正则表达式详解 #### 一、概述 JavaScript 中的正则表达式是一种用于匹配、搜索和替换字符串的强大工具。它可以帮助开发者快速高效地处理文本数据。本篇文章将基于“JS正则表达式大全”文档提供的...
一个简单的日期格式验证正则表达式可以是:`/^(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$/`。这个正则表达式可以匹配“yyyy-mm-dd”、“yyyy/mm/dd”或“yyyy.mm.dd”格式的日期,其中年份...
### 正则表达式 JS 身份证验证详解 身份证号码在中国大陆地区具有唯一性,是个人身份的重要标识。为了确保信息安全和个人隐私保护,在很多应用系统中都需要对身份证号码进行合法性和格式性的验证。本文将详细阐述...
在JavaScript中,正则表达式是一种强大的工具,用于匹配、查找和替换字符串中的模式。它在数据验证、文本处理和信息提取等方面发挥着关键作用。本文将深入解析JS中的正则表达式,涵盖其基本语法、常用元字符、以及...
### JavaScript中的正则表达式应用详解 #### 一、引言 正则表达式是一种强大的文本处理工具,能够帮助开发者高效地完成字符串的查找、替换等操作。在JavaScript中,正则表达式同样发挥着重要作用,尤其是在Node.js...
### 身份证号与出生日期的JS正则表达式验证方法详解 在现代Web开发中,对用户输入数据的有效性和正确性进行验证是至关重要的一步。特别是在处理敏感信息如身份证号码、出生日期等时,确保这些数据格式的正确性不仅...
### 页面表单有关的JS正则表达式详解 在网页开发过程中,为了确保用户输入的数据符合预期格式,经常需要利用JavaScript中的正则表达式来进行数据验证。本文将详细介绍几个常用的正则表达式及其应用场景。 #### 一...
### 正则表达式30分钟入门教程知识点详解 #### 1. 正则表达式简介 - **定义**:正则表达式是一种强大的文本处理工具,能够帮助开发者精确地匹配、查找、替换文本中的模式。 - **应用场景**:常用于编程语言中字符串...
### JavaScript正则表达式知识点详解 #### 正则表达式简介 正则表达式是一种用于匹配字符串的强大工具,在JavaScript中广泛应用于数据验证、文本搜索与替换等场景。它由一系列字符和特殊符号组成,用于定义查找模式...
本文将深入探讨一系列常用的JavaScript正则表达式及其应用场景。 #### 1. 数字验证 - **整数验证**: - `^-?[0-9]*[1-9][0-9]*$`:用于验证非零整数。 - `^-?\\d+$`:用于验证任意整数,包括负数和零。 - **...
### JavaScript中的正则表达式应用详解 #### 一、引言 在JavaScript中,正则表达式是一种强大的工具,用于处理字符串数据。它能够帮助开发者高效地完成字符串的搜索、替换以及验证等任务。本文将根据给定的代码示例...
### 正则表达式语法和用法要点详解 #### 一、正则表达式的概念与作用 正则表达式是一种强大的文本处理工具,用于描述一组字符串的抽象集合。通过正则表达式,开发者能够实现对文本的精确控制,包括搜索、替换、...