繁体   English   中英

regexp替换的意外结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM