在 JS 中,正则表达式是个 RegExp
对象,具备 exec
,test
方法。而在 String
对象中,也存在 match
,replace
,search
,split
操做正则表达式的方法。正则表达式
JS 中的正则表达式有两种声明方式(对象字面量 / 构造函数),都会生产一个 RegExp
对象的实例。数组
/pattern/flags new RegExp(pattern[, flags])
实例函数
var pattern = /quick\s(brown).+?(jumps)/ig; var pattern = new RegExp("quick\\s(brown).+?(jumps)","ig");
实例以后的 pattern
对象就具备如下属性:ui
lastIndex
:下次开始匹配的字符串位置,如果无设置全局模式,会始终为 0ignoreCase
:是否设置忽略大小写模式global
:是否设置了全局匹配模式multiline
:是否设置了多行模式source
:正则表达式的文本内容注意使用构造函数声明正则表达式的时候,需合理使用转义符。code
方法对象
RegExp.exec
检索字符串中指定的值。返回一个结果数组。该方法老是返回单词匹配的结果。字符串
在正则表达式设置了 g
模式的状况下,会同时更新 RegExp
对象的 lastIndex
属性。input
var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog'); // console.log(result) // ["Quick Brown Fox Jumps", "Brown", "Jumps"] var pattern = /ab*/g; var str = 'abbcdefabh'; var matchArray; while ((matchArray = pattern.exec(str)) !== null) { var msg = 'Found ' + matchArray[0] + '. '; msg += 'Next match starts at ' + pattern.lastIndex; //console.log(msg); // Found abb. Next match starts at 3 // Found ab. Next match starts at 9 }
使用循环的时候,不要把正则表达式的操做放置在循环体中(这样每次都会从新生成 RegExp
对象),同时必须设置全局模式,可能会形成死循环。it
RegExp.test
执行检索字符串中指定值的操做。返回 true
或 false
。console
var pattern = /^\d{4}-\d{2}-\d{2}$/; var result = re.test('2010-12-20'); console.log(result) // true
在正则表达式设置了 g
模式的状况下,跟 RegExp.exec
同样,会同时更新 RegExp
对象的 lastIndex
属性。
var pattern = /^\d{4}-\d{2}-\d{2}$/g; pattern.test('2010-12-20'); // true pattern.test('2010-12-20'); // false
RegExp.test
在匹配成功以后,各个捕获分组的文本会保存下来,用 RegExp.$1
,RegExp.$2
··· 就能够得到,不过,保存整个表达式匹配文本的 RegExp.$0
并不存在。
方法
String.match
返回一个结果数组或null
。
在正则表达式设置了 g
模式的状况下,match
默认返回全部可能的匹配结果。
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; var re = /[A-E]/gi; var matches = str.match(re); console.log(matches); // ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
若是正则表达式没有设置 g
模式,那么 match
方法返回的结果与 RegExp.exec()
一致。
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; var re = /[A-E]/i; var matches_1 = str.match(re); var matches_2 = re.exec(str) console.log(matches_1, matches_2) //[ 'A', index: 0, input: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' ]
该返回结果包含匹配的字符串,还有一个额外的 index
属性,表示匹配字符串的位置,input
属性便是所传入的字符串。
String.search
返回第一次匹配的位置或 -1
该方法用来寻找某个正则表达式在字符串中第一次匹配成功的位置,失败的时候返回 -1
。
这个方法只能找到“第一次”,即便设置了 g
模式,结果也不会有任何变化,因此若是须要使用一个正则表达式屡次验证字符串,调用该方法判断结果是否为 0,是更好的办法。
"1234".search(/^\d+$/g) == 0 // true "5678".search(/^\d+$/g) == 0 // true var pattern = /^\d+$/g; pattern.test("1234"); // true pattern.test("5678"); // false
String.split
使用一个正则表达式来切割字符串。返回数组
正则表达式是否设置了g
模式对结果没有影响。
var matchArray = "a b c".split(/\s+/); console.log(matchArray); // ["a", "b", "c"]
也能够设置第二个参数 limit
,指定返回数组的数目。在 JS 中,该参数取值的结果以下
取值 | 结果 |
---|---|
limit < 0 || limit > n | 等同于未指定 |
0<=limit<=n | 返回一个包含 n 元素的数组 |
var matchArray = "a b c".split(/\s+/,2); console.log(matchArray); // ["a", "b"]