首页 > 解决方案 > 正则表达式删除与表达式不匹配的字符

问题描述

我有这个正则表达式 let nonAlphaNumeric = /[\W_]/gi; 在“32086073S”上使用它时,字母 S 被删除。这是我用来测试的代码: "3208S6073OS".replace(/[\W_]/gi, '');

编辑:在测试中添加了 s。

下划线和 i 组合匹配 S 并删除它,为什么?

测试网址:regexr.com/4gpit

标签: javascriptregex

解决方案


您似乎偶然发现了 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。我刚刚安装了它,我确认它修复了错误。


推荐阅读