JS字符串操作还是很频繁,如果同正则表达式结合起来,功能非常强大。
1.test
验证字符串是否符合正则表达式。
/\s+/.test(" i‘m you"); //true
它只会返回true和false;
2.Match
字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
匹配到值返回一个数组,否则返回为null。
2.1 match的使用与正则表达式的g标志有很大的关系,如果正则中没有g,那么第 0 个元素存放的是匹配文本,
还含有两个对象属性。index 属性是匹配文本的起始字符中的位置,input 属性字符串的引用。
var str="1 plus 2 equal 3" console.log(str.match(/\d+/)); //["1", index: 0, input: "1 plus 2 equal 3"]
注意:如果你需要获得到index属性,应该是:
str.match(/\d+/).index。
如果正则表达式中有分组:
var str="1 plus 2 equal 3" console.log(str.match(/(\d)\s+(eq)+/)); //["2 eq", "2", "eq", index: 7, input: "1 plus 2 equal 3"]
数组中除了匹配到了正则表达式的部分,还有子表达式的部分。
2.2 如果正则表达式中有g标志,match() 方法将执行全局检索,找到所有匹配子字符串。
var str="1 plus 2 equal 3" console.log(str.match(/\d+/g)); //["1", "2", "3"]
Match无法获取到多个子表达式的值,想获取可以用exec。
3.exec
在调用非全局的 RegExp 对象的 exec() 方法时,返回的数组与调用方法 match() 返回的数组是相同的。
区别在于正则表达式是全局时,会有一个lastIndex属性,这个属性匹配文本的最后一个字符的下一个位置。
var str="1 plus 2 equal 3 2 ep3"; var regex= /(\d)\s+(e[qp])+/g; console.log(str.match(regex)); //["2 eq", "2 ep"] console.log(regex.lastIndex); //0 console.log(regex.exec(str)); //["2 eq", "2", "eq", index: 7, input: "1 plus 2 equal 3 2 ep3"] console.log(regex.lastIndex); //11
为了获取到所有的分组,可以这么做:
var str="1 plus 2 equal 3 3 ep3"; var regex= /(\d)\s+(e[qp])+/g,result; while((result = regex.exec(str))!== null) { console.log(result); console.log(regex.lastIndex); } // ["2 eq", "2", "eq", index: 7, input: "1 plus 2 equal 3 3 ep3"] // 11 // ["3 ep", "3", "ep", index: 17, input: "1 plus 2 equal 3 3 ep3"] // 21
4.replace
用于在字符串中用一些字符替换另一些字符,
replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换
$1、$2、...、$99 | 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。 |
$& | 与 regexp 相匹配的子串。 |
$` | 位于匹配子串左侧的文本。 |
$‘ | 位于匹配子串右侧的文本。 |
$$ | 直接量符号。 |
例如:把url中的u=32替换成u=32-8;
var u = 8; window.location.href.replace(/[?&]u=([^&]+)/,function($0,$1){ return $0.replace($1, $1+ ‘-‘ +u); })
时间: 2024-10-25 03:14:18