【问题标题】:character class in regular expression vs shorthand正则表达式中的字符类与速记
【发布时间】:2013-12-30 22:19:44
【问题描述】:

正则表达式上的 javscript documentation at MDN 声明:

\w 匹配任何字母数字字符,包括下划线。等价于 [A-Za-z0-9_]

考虑到这一点,为什么我会以这种方式看到一些代码:[\w]。这只是冗长的坏习惯吗? JavaScript 明确声明\w 等价于[A-Za-z0-9_]

任何官方文档的参考/引用(带有链接)将不胜感激。

【问题讨论】:

  • 你甚至可以看到人们写[x]a|b|c之类的东西。正则表达式语法很棘手,并不是每个人都能正确理解。
  • 是的,只是一个坏习惯——过度完整性,或者可能是Cargo Cult Programming
  • 使用[\w] 在国际海事组织中根本没有意义。括号是多余的,因为它与\w 相同。有些人倾向于使用字符类而不是转义,例如[.] 而不是\.,因为点在字符类中失去了意义。这种行为更多的是关于可读性和风格。附带说明一下,有时您想从\w 中排除下划线。有窍门!使用它的倒数 \W(大写),将其添加到否定字符类 [^\W] 并添加下划线 [^\W_]

标签: javascript regex


【解决方案1】:

\w[\w] 功能相同。这是“风格”/偏好的问题。
但是,有时需要在字符类中使用\w,例如:

[\w ]* --> "abcd efg hijk" // Matches the whole line
\w*    --> "abcd efg hijk" // Matches "abcd"

Example

【讨论】:

    【解决方案2】:

    每个工具对正则表达式的使用都有不同的解释。在这种情况下,它们都引用相同的内容。请记住,字符类不会嵌套在某些风格中,因此您需要单独使用 POSIX 样式的字符类 [[:alnum:]_]\w

    但是是的,在这里它们是相同的,IMO 只是使用正则表达式的坏习惯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多