Javascript 如何查找与特定正则表达式匹配的字符串?
我正在努力学习正则表达式Javascript 如何查找与特定正则表达式匹配的字符串?,javascript,regex,Javascript,Regex,我正在努力学习正则表达式/(a)\18/。我试图找出与这个regexp匹配的字符串将返回true,但我已经尝试过的所有可能性都返回false /(a)\18/.test('a18'); //false /(a)\18/.test('aa8'); //false \18不能是一个八进制数,它可以引用第一个捕获组(a),然后引用上面的8,或者它可以只转义1,然后引用上面的8,但两者都返回false。有人能解释一下这个特殊的正则表达式到底由什么组成吗?我必须不改变正则表达式。应该是上面的样子。先谢谢
/(a)\18/
。我试图找出与这个regexp匹配的字符串将返回true,但我已经尝试过的所有可能性都返回false
/(a)\18/.test('a18'); //false
/(a)\18/.test('aa8'); //false
\18
不能是一个八进制数,它可以引用第一个捕获组(a),然后引用上面的8,或者它可以只转义1,然后引用上面的8,但两者都返回false。有人能解释一下这个特殊的正则表达式到底由什么组成吗?我必须不改变正则表达式。应该是上面的样子。先谢谢你
var a=/(a)\18/.test('a18');
变量b=/(a)\18/.test('aa8');
控制台日志(a,b)代码>这个问题有两个答案:
\1按字面意思(区分大小写)匹配索引为18(110或116)的字符。
根据regex101.com:
第一捕获组(a):a按字面意思与角色a匹配(大小写)
敏感的)
\1从字面上匹配索引为18(110或116)的字符(区分大小写)
8按字面意思匹配字符8(区分大小写)
代码:console.log(/(a)\18/.test('a�8')); // 返回真值
注意:这将返回false,因为StackOferflow将实际字符替换为�. 要重新创建此文件,请执行以下操作:
- 一个简单的方法,并捕获它
- 完全正确\1
- 正好8
console.log(/(a)\18/.test('a\18'));//返回真值
另一个例子:console.log(/(a)\18/.test('patata\18'));//返回真值
在后一种情况下,“patat”被忽略,但它与前面解释的模式相匹配:a\18哦,谢谢你,这个链接帮了我很多,实际上我的regexp中的
\1
是一个八进制\001
数字,匹配;html字符。我以前尝试过这个解决方案,但显然我复制这个角色的方式不对。不用担心。很乐意帮忙:)顺便说一句,regex101对于RegExp来说总是个好主意。@Paweł:实际上,只有一个答案:\1
被解析为\x01
符号。控制台.log(/(a)\18/.test('a�8'))返回false。要将\18
解析为对第一个组和8
的反向引用,请在两者之间添加一些不匹配的内容,如/(a)\1(?)8/
。我认为该字符已被StackOverflow editor替换。执行以下操作:1)转到regex101.com,在RegExp栏上写入\18。2) 在右边,它解释了模式。将字符复制到那里:\1将字符[这里有一个管道ish]与索引18(110或116)逐字匹配(区分大小写)。3) 将该字符替换为� 在我的密码上。4) 运行命令并在控制台上得到一个true:)---为原始回复添加了解释。@Wiktor我提到我不想更改这个正则表达式,我只是在考虑它的工作原理:)它没有被解析为十六进制\x01
,而是被缩短为八进制\001
(但最后考虑到这个特殊的示例,它与\x01
)是同一个字符。事实上,我不能在regex101.com上的注释中复制这个字符:)在将我的regex变为白色时,它显示这个字符,然后我可以复制它,它在我的示例中工作。