Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 简单正则表达式wierd结果_Javascript_Regex - Fatal编程技术网

Javascript 简单正则表达式wierd结果

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

我试图用'.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开发工具中并运行即可)

这是因为
*
匹配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'sUse
newregexp('S+','.sss')
就是这样!不知道为什么我没看到。通常,当我写X时,它是在一个更复杂的表达的中间,并且被表达的其他部分强制执行,所以你知道我有另一个古老的正则表达式问题:我觉得有点低估了,但是任何详细的解释都对社区有好处。