Javascript 简单正则表达式wierd结果
我试图用'.sss'替换所有出现的'S'(大写字母S): 例如,以下行甚至不包含大写字母S,但仍替换了很多:Javascript 简单正则表达式wierd结果,javascript,regex,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.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开发工具中并运行即可)这是因为
*
匹配0或更多,因此您也匹配0“S”的出现,这意味着它匹配每个位置,其中“S”不在前面或后面()。换成
S+
,甚至只有“S”
+
匹配一个或多个。量词在0
或之间匹配,匹配次数尽可能多。因此,在本例中,它在字符串的每个字符位置都匹配。看
您正在查找表示匹配的+
量词1
或更多次
虽然由于您使用了g
修饰符(全局),但您可以简单地使用以下内容:
"MM/dd/yyyy EEEE hh:mm aa".replace(/S/g, '.sss')
// => "MM/dd/yyyy EEEE hh:mm aa"
使用RegExp('S+','g')
因为*匹配上一个字符的零次或多次
“+”与字符至少匹配1次,但也要匹配更多
var res = str.replace(/S/g,".sss");
试试这个 它应该是
new RegExp('S','g')
或者只是/S/g
,*
匹配任何东西。为什么要使用星号(0-1)量化器?只匹配一个。我还想匹配尾随的sss'sUsenewregexp('S+','.sss')
就是这样!不知道为什么我没看到。通常,当我写X时,它是在一个更复杂的表达的中间,并且被表达的其他部分强制执行,所以你知道我有另一个古老的正则表达式问题:我觉得有点低估了,但是任何详细的解释都对社区有好处。