为什么会这样
>> 'Tøjstørrelse'.replace(/[^A-Za-z0-9]*/g, '_');
结果
"_T__j_s_t__r_r_e_l_s_e_"
而不是
"Tjstrrelse"
正如我所料?
更新:这个问题让我了解行为。我知道'Tøjstørrelse'.replace(/[^A-Za-z0-9]+/g, '_');
会得到理想的结果。
答案 0 :(得分:4)
因为[^A-Za-z0-9]*
匹配每个非匹配字符前的空字符串。将*
替换为+
,它将起作用
*
相当于{0,}
表示匹配前一个构造中的0或更多==> 0次出现意味着当没有匹配的字符时,每次空字符串都会匹配!
+
相当于{1,}
表示至少需要匹配一次。
'Tøjstørrelse'.replace(/[^A-Za-z0-9]+/g, '_');
这将导致
T_jst_rrelse
答案 1 :(得分:1)
[^A-Za-z0-9]*
可以匹配零无字符,并且可以在任何地方找到。
您想要使用+ [^A-Za-z0-9]*
,甚至更好\W+
\w
也匹配下划线,但我认为这对您有用。
答案 2 :(得分:1)
您需要的是:
'Tøjstørrelse'.replace(/[^A-Za-z0-9]+/g, '');
事实上,+
是可选的 - 如果你省略它,它仍然有用。
编辑:由于编辑了您的问题并要求解释,因此这里是:
/[^A-Za-z0-9]
将匹配不字母数字的任何内容(^
指定不,并且后面的范围被OR在一起,因此它意味着不是{A到Z,a到z或0到9}。)
如果您包含+
之后,则表示“一次或多次出现”。因此,例如,如果一行中有三个非字母数字字符,那么如果您包含+
但是在没有的情况下一个一个地替换它们,它们将被批量替换。对结果没有任何影响。
答案 3 :(得分:0)
'Tøjstørrelse'.replace(/[^A-Za-z0-9]*/g, '');