我一直在学习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/