Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何查找与特定正则表达式匹配的字符串?_Javascript_Regex - Fatal编程技术网

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将实际字符替换为�. 要重新创建此文件,请执行以下操作:

  • 转到regex101.com,在RegExp栏上写入\18
  • 在右边,它解释了模式。将字符复制到那里:\1将字符[这里有一个管道ish]与索引18(110或116)逐字匹配(区分大小写)
  • 将该字符替换为� 在这个代码上
  • 运行命令并在控制台上获得true:)
  • -或-\1完全匹配\1

    你正在逃逸1,这不是一个特别的角色。 因此,它只是与确切的文本匹配:

    • 一个简单的方法,并捕获它
    • 完全正确\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变为白色时,它显示这个字符,然后我可以复制它,它在我的示例中工作。