【问题标题】:How to find string that matches the particular regular expression?如何找到与特定正则表达式匹配的字符串?
【发布时间】:2017-03-11 13:35:45
【问题描述】:

我正在努力使用正则表达式/(a)\18/。我试图找出与此正则表达式匹配的 string返回 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);

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    这个问题有两个答案:

    \1 从字面上匹配索引为 18(110 或 116)的字符(区分大小写)

    根据 regex101.com:

    第一个捕获组(a):a 匹配字符 a 字面意思(大小写 敏感)

    \1 从字面上匹配索引为 18(110 或 116)的字符(区分大小写)

    8 匹配字符 8 的字面意思(区分大小写)

    代码:console.log(/(a)\18/.test('a�8')); // returns true

    注意:这将返回 false,因为 StackOferflow 将实际字符替换为 �。要重新创建这个,请执行以下操作:

    1. 访问 regex101.com,在 RegExp 栏上写 \18。
    2. 在右侧,它解释了模式。复制那里的字符:\1 匹配字符 [这里有一个管道-ish] 字面上的索引为 18(110 或 116)(区分大小写)。
    3. 在此代码中替换该字符为 �。
    4. 运行命令并在你的控制台上得到一个 true :)

    - 或 - \1 完全匹配 \1

    您正在转义 1,这并不是一个真正的特殊字符。 因此,它只是匹配确切的文本:

    • a 并捕获它。
    • 正是\1
    • 正好 8 个

    代码:console.log(/(a)\18/.test('a\18')); // returns true

    另一个例子:console.log(/(a)\18/.test('patata\18')); // returns true

    在后一种情况下,“patat”被忽略,但它与前面解释的模式匹配:a\18

    【讨论】:

    • 哦,谢谢,这个链接对我帮助很大,实际上我的正则表达式中的\1 是一个八进制的\001 数字,它匹配 html 字符。我之前尝试过这个解决方案,但显然我以某种错误的方式复制了这个角色。
    • 不用担心。乐于助人:) regex101 对于 RegExp 来说总是一个好主意,顺便说一句。
    • @Paweł:实际上,只有 1 个答案:\1 被解析为 \x01 符号。 console.log(/(a)\18/.test('a�8')) 返回 false。要将\18 解析为对第一组和8 的反向引用,请在两者之间添加不匹配的内容,例如/(a)\1(?:)8/
    • 我认为这个字符正在被 StackOverflow 编辑器替换。这样做: 1) 访问 regex101.com,在 RegExp 栏上写下 \18。 2)在右边,它解释了模式。复制那里的字符: \1 匹配字符[这里有一个管道-ish],索引为 18(110 或 116)字面意思(区分大小写)。 3)在我的代码中将该字符替换为�。 4) 运行命令并在您的控制台上得到一个 true :) --- 为原始回复添加了解释。
    • @Wiktor 我提到我不想更改这个正则表达式,我只是在考虑它是如何工作的:) 它没有被解析为十六进制 \x01 但它被缩短为八进制 \001 (但考虑到这个特定的样本最终与\x01 相同)。事实上,我不能在 regex101.com 上的评论中复制这个字符:),当我的正则表达式变白时,它会显示这个字符,然后我可以复制它并在我的示例中工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    相关资源
    最近更新 更多