为了账号安全,请及时绑定邮箱和手机立即绑定

感觉非贪婪模式没什么用啊?比如\d{3,6}?直接使用\d{3}不就得了

感觉非贪婪模式没什么用啊?比如\d{3,6}?直接使用\d{3}不就得了,

既然非贪婪模式只要匹配到3次成功就不会继续匹配,难道还存在不能匹配3次却可以匹配6次的例子吗,

如果有请举例出不能使用\d{3}代替\d{3,6}?的例子

正在回答

4 回答

\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"

1 回复 有任何疑惑可以回复我~
#1

慢l慢

例子好棒,学习了
2018-09-13 回复 有任何疑惑可以回复我~

问题的确存在“存在不能匹配3次却可以匹配6次的例子吗”这句话。
例子:对于字符串“123aaaaaa456123aaa456”,/123\d{3,6}456/匹配的是前面的“123aaaaaa456”,而/123\d{3}456/匹配的是后面的“123aaa456”。

也就是说,当需要匹配的字符前后有要求的时候,你觉得中间是定长还是变长能一样嘛?

楼上说只有数字没有用也是不对的,如果限制了开始的或者结束的或者开始和结束的数字是确定的,情况也是类似的

0 回复 有任何疑惑可以回复我~

相对于只有数字在情况可能没有什么用途,但是在一段既有数字又有字母的而且长度又不一样的情况就有作用了

0 回复 有任何疑惑可以回复我~

应该用于测试吧,例如我想测这个正则,我只要加个3,6}?就可以了,不需要把{3,6}改成{3}。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

感觉非贪婪模式没什么用啊?比如\d{3,6}?直接使用\d{3}不就得了

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信