【问题标题】:Regular Expression Word Boundary and Special Characters正则表达式词边界和特殊字符
【发布时间】:2020-09-06 03:28:55
【问题描述】:

我有一个正则表达式来转义搜索字符串中的所有特殊字符。这很好用,但是我似乎无法让它与单词边界一起工作。例如,用大海捞针

add +

add (+)

和针

+

正则表达式/\+/gi 匹配“+”。但是正则表达式/\b\+/gi 没有。关于如何完成这项工作的任何想法?

使用

add (plus)

作为大海捞针,/\bplus/gi 作为正则表达式,它匹配得很好。我只是不明白为什么转义字符有问题。

【问题讨论】:

  • 我更改了示例字符串的格式以使它们中的空格更加明显;它们对于理解您的正则表达式失败的原因至关重要。

标签: regex


【解决方案1】:

边界是非常有条件的断言;他们锚定的东西取决于他们接触的东西。请参阅this answer 了解详细说明,以及您可以采取的其他措施。

【讨论】:

    【解决方案2】:

    \b 是一个零宽度断言:它不消耗任何字符,它只是断言某个条件在给定位置成立。单词边界断言该位置前面有一个单词字符但后面没有一个,或者后面有一个单词字符但前面没有一个。 (“单词字符”是字母、数字或下划线。)在您的字符串中:

    add +
    

    ...开头有一个单词边界,因为a 前面没有单词字符,第二个d 之后有一个单词边界,因为它后面没有单词字符。正则表达式 (/\b\+/) 中的 \b 试图在空格和 + 之间进行匹配,这不起作用,因为它们都不是单词字符。

    【讨论】:

    • 这实际上很有意义。我认为如果不创建一个预定义字符列表(例如\s\(\[ 等)以在+ 之前进行匹配,就无法实现我想要的目标?
    • 你想匹配任何不是单词的字符吗?那将是\W(大写'w')。或者您可以使用\B 断言+ 前面没有单词字符。
    • 绝对不是 not 一个单词字符,但是您对\b 的实际用法的解释让我朝着正确的方向前进。我现在正在对我的正则表达式的第一个字符进行 JS 检查。如果是\` I don't append the \b`。如果不是,我愿意。似乎得到了我想要的结果。谢谢。
    【解决方案3】:

    尝试将其更改为:

    /\b\s?+/gi
    

    编辑:

    尽可能地扩展这个概念。如果你想要任何单词边界后的第一个 +:

    /\b[^+]*+/gi
    

    【讨论】:

    • 这在我给出的具体示例中有效,但不能正确解释单词边界。例如,它不适用于“添加 (+)”作为大海捞针。
    • 我编辑了我的答案以考虑更一般的情况,但如果这不是你要找的,那么你需要更具体地说明你想要什么。
    • 不确定如何更具体。我需要使用单词边界 \b 来指定特殊字符位于单词的开头。我更新了问题以包含“添加(+)”作为示例,但显然还有几十个字符(除了空格)指定了单词边界。
    • 那我很抱歉,但我无法帮你弄清楚你需要什么。
    猜你喜欢
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多