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, "");