"1a2a345678a".replace(/\d?/g,'X')结果XaXXaXXXXXXXaX
从以上结果可以得知\d?匹配数字或者不是数字之后的""。
\d??优先匹配“”。
"12345678".replace(/\d??/g,'X')匹配字符串中所有的""
"1a2a345678a".replace(/\d??/g,'X')结果为X1XaX2XaX3X4X5X6X7X8XaX
这个应该没办法再进一步解释了吧,记住就好了
\d{3,6}?带的是一个可以改变的量词,\d{3}带的是一个确定的量词,也就是说当量词取3无法匹配,而当量词取4、5、6可以匹配时,前者返回true,后者返回false。
那么是否存在“不能匹配3次,且可以匹配4、5、6次”的例子呢?
例如:
/a0{3}a/.test("a0000aa00000aa000000a")
false
/a0{4}a/.test("a0000aa00000aa000000a")
true
/a0{3,6}?a/.test("a0000aa00000aa000000a")
true
以此类推,可以对于任意自然数n构造出“不能匹配n次,且可以匹配(n+1)、(n+2)……次”的字符串。
再看看下面的例子,或许您会对“量词”、“全局匹配”、“贪婪模式与懒惰模式”有更深的理解。
"0001110011".replace(/0\d{1,3}1/,"X")
"X10011"
"0001110011".replace(/0\d{1,3}1/g,"X")
"X1X"
"0001110011".replace(/0\d{1,3}?1/,"X")
"X110011"
"0001110011".replace(/0\d{1,3}?1/g,"X")
"X11X1"
"0001110011".replace(/0\d{1}1/,"X")
"0X110011"
"0001110011".replace(/0\d{1}1/g,"X")
"0X11X1"
是的,第一次贪婪模式,尽可能多的匹配,匹配了6个数字,所以只剩下78,第二次取消了贪婪模式,匹配了3个数字就停止了,但又是全文匹配,会接着继续匹配了3个数字,所以变成xx78
因为你的没有设为全局变量,需要g,也就是'123456789'.replace(/\d{3,6}?/g,'X')
\d{3,6}和\d{6}的区别是前者规定至少三次啊