我试图用'.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工具中并运行它)
答案 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