javascript - 正则表达式删除与表达式不匹配的字符
问题描述
我有这个正则表达式
let nonAlphaNumeric = /[\W_]/gi;
在“32086073S”上使用它时,字母 S 被删除。这是我用来测试的代码:
"3208S6073OS".replace(/[\W_]/gi, '');
编辑:在测试中添加了 s。
下划线和 i 组合匹配 S 并删除它,为什么?
测试网址:regexr.com/4gpit
解决方案
您似乎偶然发现了 Chrome 75 中最近的错误/回归(自构建 75.0.3756.0 以来)。可以在问题 972850 中找到错误报告:RegExp /[\W_]/gi 与字母 S 匹配:
"RST".replace(/[\W_]/gi, "");
预期的行为是什么?
输出为“RST”。什么地方出了错?
输出为“RT”。
该问题已与问题 971636 合并:正则表达式 /ſ/i (U+017F) 匹配正常的 s (U+0073)。Chromium 项目成员在第二个线程的评论 #13 中发现了类似的情况:
哼...
"S".match(/[\W]/i)
无效的
"S".match(/[a\W]/i)
[“S”,索引:0,输入:“S”,组:未定义]
请注意,这/[a\W]/i
只是您的情况的一个变体:该错误并非特定于下划线:只要您在\w
. 例如,/[x\W]/i
,/[,.\W#j]/i
也会触发问题。该g
标志与问题无关,当您使用u
修饰符时,问题就会消失。
无论如何,这里的重要消息是该错误已被确认并已在 Chromium 76 中修复,并且可能在 75 错误版本中修复。
如果您不担心 beta 版本,您可以下载 beta,在撰写本文时它是 76.0.3809.46。我刚刚安装了它,我确认它修复了错误。
推荐阅读
- xcode - 使用 git 命令清理文件失败
- c# - 解析时删除 XML 空格和换行符
- python - 如何在numpy中通过相同的'1rd,2rd'数组来唯一和求和'3rd'
- javascript - 有人可以帮忙吗?我正在尝试制作一个循环通过数字 -1to10 并制作半径平方的圆圈但它不起作用的程序
- python - 在pygame中插入图片出现问题怎么办?
- wordpress - 未显示灵活内容的转发器字段中的 ACF 选择字段
- mysql - 找到至少有 1 个采购订单的最年轻的客户
- ruby-on-rails - Faraday::ConnectionFailed in Devise::SessionsController#create
- assembly - 使用寄存器迭代字符串
- c - 使用不带空字符的 printf 打印字符串