简单的RegEx结果很糟糕

时间:2013-12-17 07:35:08

标签: javascript regex

我试图用'.sss'替换'S'(大写S)的所有出现:

例如,以下行甚至不包含大写字母S,它仍然替换了很多:

 "MM/dd/yyyy EEEE hh:mm aa".replace(new RegExp('S*', 'g'),'.sss')

结果是:

".sssM.sssM.sss/.sssd.sssd.sss/.sssy.sssy.sssy.sssy.sss .sssE.sssE.sssE.sssE.sss .sssh.sssh.sss:.sssm.sssm.sss .sssa.sssa.sss"

没有任何想法......

(测试此示例只需将其复制并粘贴到任何页面上的chrome或firefox dev工具中并运行它)

4 个答案:

答案 0 :(得分:3)

这是因为*匹配0或更多,所以你也匹配0“S”的出现,意味着它匹配每个位置,其中“S”不在前面或后面({{3} })。将其更改为

S+

see it on Regexr,甚至只是“S”。

+ see it on Regexr匹配一个或多个。

答案 1 :(得分:1)

*量词在这里匹配0更多次,尽可能多次。因此,在这种情况下,它匹配字符串的每个字符位置。请参阅what I mean

您正在寻找+量词意义匹配1次或更多次。

虽然您使用g修饰符(全局)后可以使用以下内容:

"MM/dd/yyyy EEEE hh:mm aa".replace(/S/g, '.sss')
// => "MM/dd/yyyy EEEE hh:mm aa"

答案 2 :(得分:1)

使用RegExp('S+', 'g')

因为*匹配前一个字符的零次或多次。

“+”匹配角色至少1次,但也更多。

答案 3 :(得分:1)

var res = str.replace(/S/g,".sss"); 

试试这个。 Use this link