javascript - 为什么 string.replace(/\W*/g ,'_' ) 在所有字符前加上?

标签 javascript regex

我一直在学习js中的正则表达式,遇到一个我不明白的情况。

我使用以下正则表达式对替换函数进行了测试:

/\W*/g

并期望它在字符串的开头添加前缀并继续替换所有非单词字符。

The Number is (123)(234)

会变成:

_The_Number_is__123___234_

这将在字符串前面添加,因为它至少有零个实例,然后替换所有不间断空格和非单词字符。

相反,它在每个字符前加上所有非单词字符。

_T_h_e__N_u_m_b_e_r__i_s__1_2_3__2_3_4__

为什么要这样做?

最佳答案

问题是\W*的意思。它的意思是“0 个或多个非单词字符”。这意味着空字符串 "" 将匹配,因为它确实是 0 个非单词字符。

因此正则表达式匹配字符串中每个字符之前和末尾,因此完成所有替换的原因。

您想要 /\W/g(替换每个单独的非单词字符)或 /\W+/g(替换每组连续的非单词字符).

"The Number is (123)(234)".replace(/\W/g, '_')  // "The_Number_is__123__234_"
"The Number is (123)(234)".replace(/\W+/g, '_') // "The_Number_is_123_234_"

关于javascript - 为什么 string.replace(/\W*/g ,'_' ) 在所有字符前加上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42588776/

相关文章:

regex - 如何匹配偶数个 1's and any amount of 0' s

jquery - 为什么 NSRegularExpression 不返回匹配索引?

python - 在 Python 中解析 TCL 列表

javascript - React Native - 状态如何与按钮一起工作

javascript - ExpressJS函数无法返回

javascript - querySelectorAll - 如何只获取某个 div 中的元素

javascript - 正则表达式验证在函数调用时未返回正确结果

Javascript:以正确的方式编码(mvc?)

javascript - 如何在本地javascript文件中使用CDN

javascript - 如何在 UI 中渲染一个数字,每 4 个字符后有一个空格?