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

2023-12-27

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

https://regex101.com/r/yhNF8U/1/ https://regex101.com/r/yhNF8U/1/


通用解决方案

Mathias Bynens 建议遵循UTS18 http://unicode.org/reports/tr18/#word推荐,从而实现 Unicode 感知\W看起来像:

[^\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]

请注意建议的 Unicode 属性类组合的注释:

这只是字边界的近似值(参见b http://unicode.org/reports/tr18/#b以下)。这 为编程语言添加了连接器标点符号 标识符,从而添加“_”和类似的字符。

更多注意事项

The \w构造(因此它的\W当在 Unicode 感知上下文中匹配时,在正则表达式引擎中匹配相似但有些不同的字符集。

例如,这里是非单词字符:\W https://learn.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#non-word-character-w.NET 定义:[^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Mn}\p{Pc}\p{Lm}], where \p{Ll}\p{Lu}\p{Lt}\p{Lo}可以收缩到纯粹\p{L}因此该模式等于[^\p{L}\p{Nd}\p{Mn}\p{Pc}].

在 Android 中(请参阅文档 https://developer.android.com/reference/java/util/regex/Pattern#unicode-support), [^\p{Alpha}\p{gc=Mn}\p{gc=Me}\p{gc=Mc}\p{Digit}\p{gc=Pc}\p{IsJoin_Control}], where \p{gc=Mn}\p{gc=Me}\p{gc=Mc}可以写成\p{M}.

在 PHP PCRE 中,\W火柴[^\p{L}\p{N}_].

Reexegg 备忘单 https://www.rexegg.com/regex-quickstart.html#classes定义Python 3\w as "Unicode 字母、表意文字、数字或下划线", i.e. [\p{L}\p{Mn}\p{Nd}_].

你可以大致分解一下\W as [^\p{L}\p{N}\p{M}\p{Pc}]:

/[^\p{L}\p{N}\p{M}\p{Pc}]/gu

where

  • [^ - is the start of the negated character class that matches a single char other than:
    • \p{L}- 任何 Unicode 字母
    • \p{N}- 任何 Unicode 数字
    • \p{M}- 变音符号
    • \p{Pc}- 连接器标点符号
  • ]- 字符类结束。

注意是\p{Pc}与下划线匹配的类。

NOTE that \p{Alphabetic} (\p{Alpha}) 包括所有匹配的字母\p{L}, plus 字母数字匹配于\p{Nl} (e.g. – 罗马数字的字符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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript 正则表达式匹配任何脚本中所有非单词字符的正确正则表达式范围是什么? 的相关文章

随机推荐

  • 使用带有 IN 子句的 query() 进行 CodeIgniter 数据库查询

    我的模型中有以下代码 sql SELECT t1 t2 FROM Table1 t1 INNER JOIN Table2 t2 ON t1 id t2 id AND t2 title IN AND t1 type ORDER BY t1 i
  • 将现有数据库与 ASP.NET 5 和 EF7(测试版 7)结合使用

    我正在尝试使用 ASP NET 和 EF 7 beta 7 的空模板项目连接到现有数据库 这是我的 project json 的样子 webroot wwwroot userSecretsId aspnet5 Titanes2015 409
  • 如何在 JTextArea 中设置文本格式

    我正在尝试输出多行文本来创建 ASCII 艺术 但是当我使用 JFrame 和 JTextArea 时 它无法正确排列 我正在尝试打印ASCII 艺术圣诞快乐 https i stack imgur com WSsLh png但是当我在新窗
  • 如何通过redirect()传递验证错误数据?

    我有一个包含表单的页面 当任何用户提交它时 数据都会发送到控制器 控制器检查验证 如果有任何错误 它将用户重定向到上一页 包含表单的页面 否则它将数据发送到模型 要从控制器重定向到上一页 如果有任何验证错误 我有以下代码 redirect
  • 调整缩放 Gmaps4Rails

    我正在使用 Gmaps4Rails gem 无法弄清楚如何调整默认缩放设置 在我看来 我有以下代码 我知道这个问题已经被问过并回答过很多次了 但也许我只是没有看到一些东西 有什么建议吗 我错过了一些完全明显的东西吗 我很抱歉重新发布这个问题
  • 为什么 UriInfo.getQueryParameters() 不解码“+”?

    我知道我可以解决这个问题 但是与从参数映射中提取参数 应该根据 javadoc 进行解码 相比 如果使用带注释的查询参数 行为会有所不同 这似乎很奇怪 这是一个错误 还是只是一个怪癖 GET Path Produces MediaType
  • .htaccess 从 GET 变量重定向到 url 字符串

    我需要重定向 search keywords somesearchterm to search somesearchterm 这看起来非常基本 但我已经为此绞尽脑汁一个小时了 感谢您花时间查看此内容 您想使用 mod rewrite 实现所
  • (ROSE 绘图错误)错误:分面变量必须至少有一个值

    我正在尝试使用下面的代码在 R 中绘制每月玫瑰图 但遇到错误 错误 分面变量必须至少有一个值 这是我正在使用的数据 链接到数据 https www dropbox com s spwpoukrli5p715 test csv dl 0 这段
  • 多线程 Python 中的信号处理

    这应该非常简单 我很惊讶我在 stackoverflow 上找不到这个问题的答案 我有一个类似守护程序的程序 需要响应 SIGTERM 和 SIGINT 信号才能与 upstart 良好地配合 我读到 执行此操作的最佳方法是在与主线程不同的
  • 从数组中返回具有最高值的对象

    我想从数组中返回一个属性具有最高值的对象 目前我正在做以下事情 Get VM Sort Object Property ProvisionedSpaceGB Select Object Last 1 这可行但效率低下 我不需要对整个数组进行
  • Apache Phoenix - 如何在 Kerberos 集群上启动查询服务器和瘦客户端

    我最近花了几天时间尝试通过zookeeper运行phoenix Thin queryserver py和sqlline thin py 和thick以保护集群 但是 我无法在安全集群上启动或连接phoenix服务 在phoenix瘦客户端和
  • Mongo Atlas:自定义数据库的连接身份验证失败

    我正在尝试 Mongo Atlas Cloud 我创建了一个集群 并尝试与 mongo shell 连接 与 mongo 驱动程序存在同样的问题 mongo mongodb cluster shard 00 00 mongodb net 2
  • Ruby 读写带有引号的 CSV

    我想读取 csv 行 更新一个字段 然后再次用引号输出该行 Row Example Input gt Joe Blow email protected cdn cgi l email protection Desired Row Examp
  • Cygwin显示进程的cpu使用情况?

    希望这个问题能够得到解决 因为我一直在网上寻找答案 但没有结果 Cygwin 是否有显示 Windows 进程的 cpu 的命令 我知道这个命令top可以显示此信息 但它只显示 Cygwin 进程 而不显示 Windows 还有另一个命令
  • GWT (event.getCharCode) 在 IE 和 Firefox 中的行为不同

    我正在经历tutorial http code google com webtoolkit doc latest tutorial manageevents html可在 GWT 网站上获取 StockWatcher 应用程序并按照步骤 4
  • 读取文本文件作为资源

    我正在尝试从资源中读取文件 words txt 这是一个非常简单但很大 2 MB 的文本文件 我想逐行读取它 我已将文件放入 res raw words txt 中 并尝试使用以下代码打开它 try BufferedReader in ne
  • 获取单元格设置了 WrapText 的行的高度

    我正在尝试计算插入到 Excel 工作表中的行的高度 该行的单元格格式为WrapText true 所以行的高度不是固定的 访问 row Height 将返回 null 我正在考虑使用类似的东西Graphics MeasureString我
  • RestKit:无法使用 coredata 执行映射

    我正在使用rest kit 0 20 3和Xcode 5 如果没有核心数据 我可以执行所有rest kit操作 但是当我使用核心数据尝试它时 我什至无法执行GET由于一些问题 我想不通 我是核心数据的新手 所以请帮忙 这是我的代码 AppD
  • 脚本文件中的 mkdir -p 是什么意思?

    我在xx sh中发现了这样的一部分脚本 BUILD BOOT mkdir p BUILD BOOT 任何人都可以帮助解释上面的脚本是什么 因为目录参数是 p是缩写 parents 它创建直到给定目录的整个目录树 例如 假设当前目录中没有目录
  • javascript 正则表达式匹配任何脚本中所有非单词字符的正确正则表达式范围是什么?

    在 python 或 PHP 中 一个简单的正则表达式 例如 W gu匹配任何脚本中的任何非单词字符 但在 javascript 中它匹配 A Za z0 9 与 python 和 PHP 匹配相同字符的正确范围是多少 https rege