js 正则 ? 匹配使用
正则表达式中的 (?:pattern)
、(?=pattern)
、(?!pattern)
、(?<=pattern)
和 (?<!pattern)
,容易忘记这里做个笔记。
?:pattern
匹配 pattern 但不获取匹配结果
var str = 'aaabbb';
var reg = /(a+)(?:b+)/;
console.log(str.match(reg));
// 输出: ["aaabbb", "aaa", index: 0, input: "aaabbb", groups: undefined]
?=pattern
捕获以 pattern 结尾的内容
var str = "i'm singing and dancing";
var reg = /\b(\w+(?=ing\b))/g;
var res = str.match(reg);
console.log(res);
// 输出: ["sing", "danc"]
?!pattern
捕获不以 pattern 结尾的内容
var str = 'nodejs';
var reg = /node(?!js)/;
console.log(reg.test(str));
// 输出: false
?<=pattern
捕获以 pattern 开头的内容
var str = '111$222';
var reg = /(?<=\$)\d+/;
console.log(str.match(reg));
// 输出: ["222", index: 4, input: "111$222", groups: undefined]
?<!pattern
捕获不以 pattern 开头的内容
var str = '¥998$888';
var reg = /(?<!\$)\d+/;
console.log(reg.exec(str));
// 输出: ['998', index: 1, input: '¥998$888', groups: undefined]
/(?<!a|b)c/.exec('dc');
// 输出: ['c', index: 1, input: 'dc', groups: undefined]
/(?<!a|b)c/.exec('ac');
// 输出: null