我是妄想,还是JS RegExp支持可选的重复范围?

时间:2013-11-22 01:16:25

标签: javascript regex

/\d{,5}/.test('')

我认为这是件事,但显然不是。为什么一个人会这么想?

2 个答案:

答案 0 :(得分:2)

量词{n1,n2} 一个有效的JavaScript正则表达式量词,它将匹配n1到n2次,包括在内。

但是,{,n} 表示量词,因为需要最小界限。有关语法产生和规则,请参阅15.10.2.7 Quantifier部分。

以下都介绍了有效的量程量词:

/\d{3,5}/.test('12')      // false
/\d{3,5}/.test('1234')    // true
/\d{3,5}/.test('123456')  // false

另一方面,以下正则表达式创建量词。相反,生产被解析为文字文本而没有特殊含义:

/a{,5}b/.test('a{,5}b')   // true, at least in Chrome and IE

答案 1 :(得分:1)

  

我认为这是件事,但显然不是。为什么一个人会这么想?

如果你看起来很快,它会欺骗你。但是运营商的实施是不完整的,并且会失败。

以下范围量词/运算符被识别:

{n}     Match the preceding exactly n times
{n,}    Match the preceding at least n times
{n,m}   Match the preceding at least n but not more than m times
{n,}?   Match the preceding at least n times, but as few times as possible.
{n,m}?  Match the preceding between n and m times, but as few times as possible.

使用操作员时,您必须设置{n范围,,m}后面的所有内容都是可选的。

正确使用量词/运算符的示例。

"12345".match(/\d{3}/);    // => matches '123'
"12345".match(/\d{5,}/);   // => matches '12345', FAILS on 1234
"12345".match(/\d{1,4}/);  // => matches '1234'
"12345".match(/\d{2,}?/);  // => matches '12'
"12345".match(/\d{2,4}?/); // => matches '12'