我正在努力学习正则表达式/(a)\18/
。我试着找出与此正则表达式匹配的字符串将返回true ,但我已经尝试过的所有可能性都返回false。
/(a)\18/.test('a18'); //false
/(a)\18/.test('aa8'); //false
\18
不能是八进制数,它可以引用第一个捕获组(a),然后是 8 ,如上所述,或者它可以如上所述只是转义 1 ,然后是 8 ,但两者都返回false。有人可以解释一下这个特定正则表达式究竟是由什么组成的吗?对我来说,不要改变正则表达式是至关重要的。它应该如上所示。提前谢谢
var a = /(a)\18/.test('a18');
var b = /(a)\18/.test('aa8');
console.log(a,b);
答案 0 :(得分:1)
这个问题有两个答案:
\ 1字面匹配索引为18(110或116)的字符(区分大小写)
根据regex101.com:
第一捕获组(a):a字面符合字符(案例 敏感)
\ 1字面匹配索引为18(110或116)的字符(区分大小写)
8字符8字面匹配(区分大小写)
代码:console.log(/(a)\18/.test('a�8')); // returns true
注意:这将返回false,因为StackOferflow用�替换实际字符。要重新创建此项,请执行以下操作:
- 或 - \ 1完全匹配\ 1
你正在逃避1,这不是一个特殊的角色。 因此,它只是匹配确切的文本:
代码:console.log(/(a)\18/.test('a\18')); // returns true
另一个例子:console.log(/(a)\18/.test('patata\18')); // returns true
在后一种情况下," patat"被忽略,但它与之前解释的模式相匹配:a \ 18