重复可能不存在的匹配模式

时间:2015-07-17 10:48:11

标签: javascript regex

我们有这个简单的正则表达式:

var regex = \a[bc]*\;

// matches 'ab', 'abb', 'accc'

但是这个正则表达式也匹配了#a;'。 换句话说,因为模式[bc]不存在,所以它重复了'a' a。但意图是要抓住“a”和“a”。那么任何数量的' b'或者' c'。

你将如何应用*(重复模式),以便只有匹配任何内容时才会对前一个字符起作用。

1 个答案:

答案 0 :(得分:6)

没有。 *未应用于regex中的a*仅适用于字符类 [bc]

您还没有匹配完整的字符串。您必须在^中使用$(以...开头)和regex(以...结尾)。

var regex = /^a[bc]*$/;
//           ^      ^

如果要匹配较大字符串中的子字符串,请使用字边界选择器。

var regex = /\ba[bc]*\b/;
//           ^^      ^^

演示:



var regex = /\ba[bc]*\b/;

document.write("regex.test('a'): " + regex.test('a')); // true
document.write("<br />regex.test('abc'): " + regex.test('abc')); // true
document.write("<br />regex.test('abcab'): " + regex.test('abcab')); // false
document.write("<br />regex.test('aa'): " + regex.test('aa')); // false


// Words in string
document.write("<br /><br />regex.test('this is a adbc'): " + regex.test('this is a adbc')); // true 'a'
document.write("<br />regex.test('this is adbc'): " + regex.test('this is adbc')); // false
&#13;
&#13;
&#13;

视觉表现

enter image description here