Javascript 正则表达式删除与表达式不匹配的字符

Javascript 正则表达式删除与表达式不匹配的字符,javascript,regex,Javascript,Regex,我有这个正则表达式 let nonAlphaNumeric=/[\W\u]/gi 在“32086073S”上使用时,字母S将被删除。 这是我用来测试的代码: “3208S6073OS”。替换(/[\W\u]/gi,”) 编辑:在测试中添加了 下划线和i组合在一起匹配S并删除它,为什么 测试url:regexr.com/4gpit您似乎无意中发现了Chrome75(自构建75.0.3756.0以来)中最近的一个bug/回归。错误报告可在以下位置找到: 预期的行为是什么? 输出为“RST” 出了什么

我有这个正则表达式
let nonAlphaNumeric=/[\W\u]/gi
在“32086073S”上使用时,字母S将被删除。
这是我用来测试的代码:
“3208S6073OS”。替换(/[\W\u]/gi,”)

编辑:在测试中添加了

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


测试url:regexr.com/4gpit

您似乎无意中发现了Chrome75(自构建75.0.3756.0以来)中最近的一个bug/回归。错误报告可在以下位置找到:

预期的行为是什么?
输出为“RST”

出了什么问题?
输出为“RT”

这一问题与其他问题合并在一起。Chromium项目的一名成员在第二个线程的评论#13中发现了一个类似的案例:

哼…
“S”。匹配(/[\W]/i)

空的

“S”。匹配(/[a\W]/i)

[“S”,索引:0,输入:“S”,组:未定义]

请注意,
/[a\W]/i
只是您案例中的一个变体:错误并不特定于下划线:只要您在
\W
中的类中添加一个字符,错误就会发生。例如,
/[x\W]/i
/[,.\W#j]/i
也会引发问题。
g
标志与问题无关,当您使用
u
修饰符时,问题消失

无论如何,这里的重要消息是,这个bug已经被确认,并且在Chromium 76中得到了修复,可能还有一个75 bug版本


如果你不害怕测试版,你可以,在撰写本文时是76.0.3809.46。我刚刚安装了它,我确认它修复了错误。

“32086073S”。替换(/[\W\u]/gi,”)
32086073
你从哪里得到这种行为的?我只能看到,这并不是预期的那样:在不重要的匹配情况下,所有字符都会在比较之前立即隐式转换为大写。但是,如果将一个字符转换为大写会将该字符扩展为多个字符(例如将
“ß”
\u00DF
)转换为
“SS”
),然后该字符保持原样。如果该字符不是ASCII字符,则该字符也保持原样,但将其转换为大写将使其成为ASCII字符。这将防止Unicode字符(如
\u0131
\u017F
与正则表达式(如
/[a-z]/i
)匹配,这些正则表达式仅用于匹配ASCII字母。此外,如果允许这些转换,那么
/[^\W]/i
将匹配
a
b
、…、
h
,但不匹配
i
s
。您能在在线正则表达式测试仪中重现这种行为吗?我无法在这里重现您的问题,我从您的示例中复制了您的字符串。@WiktorStribiżew,我不认为这是重复的。在Chrome中,这似乎真的是一种偏离行为。在FF、Edge、IE11中,“S”不匹配,而在Chrome(v75)中它(错误地)匹配。这并不能解释这一点。
"RST".replace(/[\W_]/gi, "");