[英]Unexpected result of regexp replace
为什么这样
>> '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, '_');
给出期望的结果。
因为[^A-Za-z0-9]*
在每个不匹配的字符之前都匹配空字符串。 更换*
用+
,它会工作
*
等同于{0,}
表示匹配0个或多个先前的构造==> 0次出现表示在没有字符匹配时每次空字符串都将匹配!
+
等于{1,}
表示它至少需要匹配一次。
'Tøjstørrelse'.replace(/[^A-Za-z0-9]+/g, '_');
这将导致
T_jst_rrelse
[^A-Za-z0-9]*
可以匹配零个无字符,并且可以在任何地方找到。
您想使用+ [^A-Za-z0-9]*
甚至更好的\\W+
。
\\w
也匹配下划线,但是我认为这可以为您工作。
您需要的是:
'Tøjstørrelse'.replace(/[^A-Za-z0-9]+/g, '');
实际上, +
是可选的-如果省略它,它将仍然有效。
编辑:既然已经编辑了您的问题并要求作出解释,这里是:
/[^A-Za-z0-9]
将与非字母数字的任何内容匹配( ^
指定不匹配,并且后面的范围进行或运算,因此不表示{A到Z,a到z或0到9}) 。
如果在后面加上+
,则表示“一个或多个事件”。 因此,例如,如果连续包含三个非字母数字字符,则在包含+
将全部替换它们,而在不包含-的情况下将它们一一替换,这对结果没有影响。
'Tøjstørrelse'.replace(/[^A-Za-z0-9]*/g, '');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.