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

col*_*eau 2 javascript regex

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

var regex = \a[bc]*\;

// matches 'ab', 'abb', 'accc'
Run Code Online (Sandbox Code Playgroud)

但这个正则表达式也匹配'aa'.换句话说,因为模式[bc]不存在,所以它重复了'a'.但意图是抓住'a'然后任意数量的'b'或'c'.

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

Tus*_*har 6

*没有被施加到aregex.*仅适用于字符类 [bc].

您没有匹配完整的字符串.你必须使用^(开头)和$(结束)regex.

var regex = /^a[bc]*$/;
//           ^      ^
Run Code Online (Sandbox Code Playgroud)

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

var regex = /\ba[bc]*\b/;
//           ^^      ^^
Run Code Online (Sandbox Code Playgroud)

演示:

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
Run Code Online (Sandbox Code Playgroud)

视觉表现

在此输入图像描述