正则表达式(RegExp)—JavaScript的内置标准对象。
定义方式
// 第一种:以两个斜杠包括住正则表达式的内容。
var re1 = /ABC\\-001/;
// 第二种:以对象的形式新建,但要是有特殊字符需要用反斜杠转义,不如第一种方便。
var re2 = new RegExp('ABC\\\\-001');
匹配方式
// 通过RegExp的exec函数,来进行正则匹配。
var re = /^(\\d+?)(0*)$/;
re.exec('102300'); // ['102300', '1023', '00']
// 只获取匹配结果,不含匹配组信息
s = '102300';
var found = s.match(re);
console.log(found); // 102300
全局搜索:添加 g ,每次搜索都会更新lastIndex
属性,相当于每次搜索都是在上一次搜索匹配到的最终索引。
var s = 'JavaScript, VBScript, JScript and ECMAScript';
var re=/[a-zA-Z]+Script/g;
// 使用全局匹配:
re.exec(s); // ['JavaScript']
re.lastIndex; // 10
re.exec(s); // ['VBScript']
re.lastIndex; // 20
re.exec(s); // ['JScript']
re.lastIndex; // 29
re.exec(s); // ['ECMAScript']
re.lastIndex; // 44
re.exec(s); // null,直到结束仍没有匹配到
默认情况下,正则表达式的量词是贪婪的,它们会匹配尽可能多的字符。
正则表达式:/a.*b/
匹配字符串:"aabcb"
匹配结果:贪婪匹配会匹配整个字符串,即从第一个 a 到最后一个 b。
在量词后面加上 ?
,可以将贪婪匹配转变为非贪婪匹配,也称为懒惰匹配。非贪婪匹配会尽可能少地匹配字符。
正则表达式:/a.*?b/
匹配字符串:"aabcb"
匹配结果:非贪婪匹配会匹配第一个 a 到第一个 b 之间的内容,即 "aab"。
贪婪匹配和非贪婪匹配的区别在于它们对字符串的匹配方式。贪婪匹配倾向于匹配更多字符,而非贪婪匹配倾向于匹配更少字符。在需要匹配最短可能的字符串时,可以使用非贪婪匹配。