javascript - javascript 正则表达式匹配任何脚本中所有非单词字符的正确正则表达式范围是多少?

标签 javascript regex

在 python 或 PHP 中,一个简单的正则表达式,例如 /\W/gu匹配任何脚本中的任何非单词字符,但在 javascript 中匹配 [^A-Za-z0-9_] ,与python和PHP匹配相同字符的正确范围是多少?
https://regex101.com/r/yhNF8U/1/

最佳答案

通用解决方案
Mathias Bynens 建议关注 UTS18推荐,因此可以识别 Unicode \W看起来像:

[^\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]
请注意建议的 Unicode 属性类组合的注释:

This is only an approximation to Word Boundaries (see b below). The Connector Punctuation is added in for programming language identifiers, thus adding "_" and similar characters.


更多注意事项 \w构造(因此它的 \W 对应物)在 Unicode 感知上下文中进行匹配时,在正则表达式引擎中匹配相似但有些不同的字符集。
例如,这里是 Non-word character: \W .NET 定义:[^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Mn}\p{Pc}\p{Lm}] , 其中 \p{Ll}\p{Lu}\p{Lt}\p{Lo}可以承包到一个纯粹的\p{L}因此模式等于[^\p{L}\p{Nd}\p{Mn}\p{Pc}] .
在 Android 中(参见 documentation),[^\p{Alpha}\p{gc=Mn}\p{gc=Me}\p{gc=Mc}\p{Digit}\p{gc=Pc}\p{IsJoin_Control}] , 其中 \p{gc=Mn}\p{gc=Me}\p{gc=Mc}可以写成\p{M} .
在 PHP PCRE 中,\W匹配 [^\p{L}\p{N}_] .
Rexegg cheat sheet定义 Python 3 \w作为“Unicode 字母、表意文字、数字或下划线”,即 [\p{L}\p{Mn}\p{Nd}_] .
你可以粗略分解\W作为[^\p{L}\p{N}\p{M}\p{Pc}] :
/[^\p{L}\p{N}\p{M}\p{Pc}]/gu
在哪里
  • [^ - 是匹配单个字符的否定字符类的开始,而不是:
  • \p{L} - 任何 Unicode 字母
  • \p{N} - 任何 Unicode 数字
  • \p{M} - 变音符号
  • \p{Pc} - 连接符标点符号

  • ] - 字符类结束。

  • 注意它是 \p{Pc}匹配下划线的类。
    注意 \p{Alphabetic} ( \p{Alpha} ) 包括与 \p{L} 匹配的所有字母, 加上与 \p{Nl} 匹配的字母数字(例如 – 罗马数字的字符 12 ),以及与 \p{Other_Alphabetic} 匹配的一些其他符号(\p{OAlpha})。
    其他变体:
  • /[^\p{L}0-9_]/gu - 只使用 \W只知道 Unicode 字母的
  • /[^\p{L}\p{N}_]/gu - (PCRE \W 风格)仅使用 \W只知道 Unicode 字母和数字。

  • 请注意,Java 的 (?U)\W将匹配 \W 的混合在 PCRE、Python 和 .NET 中匹配。

    关于javascript - javascript 正则表达式匹配任何脚本中所有非单词字符的正确正则表达式范围是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62772641/

    相关文章:

    regex - 正则表达式获取两个指定字符之间的任何内容

    java - 如何使用正则表达式验证字符串中两个字符之间没有空格

    在 chrome 中给出不同值的 javascript 代码

    javascript - 通过 web 使用 jointjs 绘制线条

    javascript - 如何获取具有元视口(viewport)大小的移动设备的实际视口(viewport)?

    Java - 获取脚本标签内的文本

    javascript - jQuery 可折叠 div,折叠第二个 div

    javascript - 图片库,例如 picasa 或 facebook

    javascript - JS 正则表达式匹配引号内的逗号

    regex - 正则表达式不包括 R 中的单词