字符
| 表示在两个或多个项之间进行选择,类似或
/ 开始和结尾
转义
- 连字符,当且仅当在字符组 [] 的内部表示一个范围,比如[A-Z] 表示范围从A 到Z ;如果需要在字符组里面表示普通字符 - ,放在字符组的开头或结尾即可
. 匹配出换行符 n 之外的任何单个字符
d 等价[0-9] ,匹配0 到9 数字
D 等价[^0-9] ,与 d 相反
w 匹配以下字符:A-Z、a-z、0-9 个下划线,等价于 [A-Za-Z0-9]
W [^A-Za-z0-9]
限定符(量词字符)
显示限定符位于大括号{} 中,并包括指示出现次数上下限的数值; *+? 这三个字符属于单字符限定符:
{n} 刚好匹配 n 请输入代码次
{n,} 至少匹配 n 次
{n,m} 匹配至少 n 次,至多 m 次,即匹配 n 到 m 次
* 等价 {0,}
+ 等价 {1,}
? 等价 {0,1}
注意:
显示限定符中,逗号和数字之间不能有空格,否则返回null
贪婪量词 * 和 + :JavaScript 默认是贪婪匹配,即匹配重复字符是尽可能多的匹配
惰性(最少重复匹配)量词 ? :当进行贪婪匹配,只需要在要匹配的字符后面加上一个 ? 即可
var reg = /a+/;
var reg2 = /a+?/;
var str = 'aaab';
str.match(reg); // ["aaa"]
str.match(reg2); // ["a"]
定位点(锚字符、边界)
^ 匹配开始的位置。将 ^ 用作括号 [] 表达式中的第一个字符,则会对字符集求反
$ 匹配结尾的位置
b 与一个字边界匹配,比如 erb 与 "never " 中的 "er " 匹配,但与 "verb " 中的 "er " 不匹配
B 非边界字匹配
标记
[] 字符组,标记括号表达式的开始和结尾。[...] 匹配括号内任意字符。很多字符在 [] 都会失去原来的意义:[^...] 匹配不在括号内的任意字符;[?.] 匹配普通的问号和点号
注意:
在 [] 中仍为转义字符。如果要匹配反斜杠字符,使用两个反斜杠
{} 标记限定符表达式的开始和结尾
{} 标记子表达式的开始和结尾,主要作用是分组,对内容进行区分 (模式) 记住和这个模式匹配的匹配项(捕获分组),不要滥用括号,如果不需要保存子表达式,可使用非捕获型括号 (?:) 来进行性能优化
(?:模式 ) 与模式匹配,但不保存匹配项(非捕获分组)
(?=模式) 零宽正向先行断言,要求匹配与模式匹配的搜索字符串。找到一个匹配项后,将在匹配文本之前开始搜索下一个匹配项;但不会保存匹配项
(?!模式) 零宽负向先行断言,要求匹配与模式不匹配的搜索字符串。找到一个匹配项后,将在匹配文本之前开始搜索下一个匹配项;但不会保存匹配项
先行断言 ?= 模式:x 只有在 y 前面才匹配,必须写成 /x(?=y)/ 。解释:找一个 x ,那个 x 的后面要有 y
先行否定断言 ?! 模式:x 只有不在 y 前面才匹配,必须写成 /x(?!y)/ 。解释:找一个 x ,那个 x 的后面没有 y
ES7提案
后行断言( ?<= 模式) :与”先行断言”相反, x 只有在y 后面才匹配,必须写成 /(?<=y)x/ 。解释:找一个 x ,那个 x 的前面要有 y 。
后行否定断言 ( ?<! 模式) : 与”先行否定断言“相反,x 只有不在y 后面才匹配,必须写成 /(?<!y)x/ 。 解释:找一个x ,那个 x 的前面没有 y 。
反向引用 :主要作用是给分组加上标识符 ln n 表示引用字符,与第 ln 个子表达式第一次匹配的字符相匹配
var str = '<div class="o2">' +
'<div class="o2_team">' +
'<img src="">' +
'</div>' +
'</div> ';
// <(?!img) 表示找一个左尖括号<,而且左尖括号 < 的后面没有img字符;
// (?:.|r|n)*? 表示匹配左右尖括号<>里面的.或r或n,而且匹配次数为*?;(?:)不保存匹配项,提高性能;
// *后面加个? 表示非贪婪匹配。
var reg = /<(?!img)(?:.|r|n)*?>/gi;
str.match(reg);
反向引用的例子,给 MikeMike 字符后加个单引号:
var reg = /(Mike)(1)(s)/;
var str = "MikeMikes";
console.log(str.replace(reg,"$1$2'$3"));
// 返回结果 MikeMike's
非打印字符
s 任何空白字符。即 [fnrtv]
S 任何非空白字符
t Tab 字符 (u0009)
n 换行符 (u000A)
v 垂直制表符 (u000B)
f 换页符 (u000C)
r 回车符 (u000D)
注意
n 和 r 一起使用,即 /[rn]/g 来匹配换行,因为 Unix 扩展的系统以 n 标志结尾,Windows 以 rn 标志结尾
其他
cx 匹配 x 指示的控制字符,要求 x 的值必须在 A-Z 或 a-z 范围内
xn 匹配 n n 是一个十六进制转义码,两位数长
un 匹配 n 其中 n 是以四位十六进制数表示的 Unicode 字符
nm 或 n 先尝试反向引用,不可则再尝试标识为一个八进制转义码
nml 当 n 是八进制数字 (0-3) ,m 和 l 是八进制数字 (0-7) 时,匹配八进制转义码 nml
修饰符
i 执行不区分大小写的匹配
g 执行一个全局匹配,即找到所有的匹配,而不是在找到第一个之后就停止
m 多行匹配模式,^ 匹配一行的开头和字符串的开头,$ 匹配行的结束和字符串的结束
ES6 新增 u 和 y 修饰符
u 修饰符 Unicode 模式,用来正确处理大于 uFFFF 的 Unicode 字符。正确处理四个字节的 UTF-16 编码
// 加u修饰符以后,ES6就会识别uD83DuDC2A为一个字符,返回false。
/^uD83D/u.test('uD83DuDC2A'); // false
/^uD83D/.test('uD83DuDC2A'); // true
y 修饰符 与g 修饰符都是全局匹配,不同之处在于:lastIndex 属性指定每次搜索的开始位置,g 修饰符从这个位置开始向后搜索,直到发现匹配为止;但是 y 修饰符要求必须在 lastIndex 指定的位置发现匹配,即 y 修饰符确保匹配必须从剩余的第一个位置开始
/b/y.exec('aba') // null
/b/.exec('aba') // ["b"]
优先级顺序
转义符
(),(?:),(?=),[] 括号和中括号
*、+、?、{n}、{n,}、{n,m} 限定符 任何元字符 ^、$、 定位点和序列
| 替换 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|