【问题标题】:What are non-word boundary in regex (\B), compared to word-boundary?与单词边界相比,正则表达式(\B)中的非单词边界是什么?
【发布时间】:2010-12-27 20:25:31
【问题描述】:

与单词边界相比,正则表达式 (\B) 中的非单词边界是什么?

【问题讨论】:

    标签: javascript regex word-boundary boundary word-boundaries


    【解决方案1】:

    一个词的边界(\b)是一个可以匹配的零宽度匹配:

    • 在单词字符 (\w) 和非单词字符 (\W) 之间或
    • 在单词字符和字符串的开头或结尾之间。

    在 Javascript 中,\w 的定义是 [A-Za-z0-9_]\W 是其他任何东西。

    \b 的否定版本,写成\B,是一个零宽度匹配,上面成立。因此它可以匹配:

    • 两个单词字符之间。
    • 在两个非单词字符之间。
    • 在非单词字符和字符串的开头或结尾之间。
    • 空字符串。

    例如,如果字符串是"Hello, world!",那么\b 在以下位置匹配:

     H e l l o ,   w o r l d !
    ^         ^   ^         ^ 
    

    \B 匹配那些\b 不匹配的地方:

     H e l l o ,   w o r l d !
      ^ ^ ^ ^   ^   ^ ^ ^ ^   ^
    

    【讨论】:

    • 不错的一个。根据我的经验,解释单词边界比使用要困难得多。
    • 我以前从未见过如此清晰的单词边界解释。太棒了!
    【解决方案2】:

    non-word-boundary 的基本目的是创建一个正则表达式:

    • 如果我们在 word char (\w = [a-zA-Z0-9_]) 的开头/结尾,请确保上一个/下一个字符也是 word char

      例如:"a\B." ~ "a\w"

      "ab", "a4", "a_", ... 但不是"a ", "a."

    • 如果我们位于 non-word char (\W = [^a-zA-Z0-9_]) 的开头/结尾,请确保上一个/下一个字符也是 non-word char

      例如:"-\B." ~ "-\W"

      "-.", "- ", "--", ... 但不是"-a", "-1"

    对于word-boundary,它是相似的,但不是确保相邻字符属于同一类 (word char/non-word car),它们需要不同,因此命名为 word's boundary

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      • 2021-06-18
      • 1970-01-01
      相关资源
      最近更新 更多