我正在尝试通过正则表达式拆分字符串并得到意外结果:
var str = 'name == abcd';
var pattern = /([^!=>< ]+)\s*([!=><]+)\s*(.)+/i;
pattern.exec(str);
该示例的结果是:[ "name == abcd", "name", "==", **"d"** ]
为什么"d"
而不是"abcd"
?
我正在尝试通过正则表达式拆分字符串并得到意外结果:
var str = 'name == abcd';
var pattern = /([^!=>< ]+)\s*([!=><]+)\s*(.)+/i;
pattern.exec(str);
该示例的结果是:[ "name == abcd", "name", "==", **"d"** ]
为什么"d"
而不是"abcd"
?
捕获组(.)
只捕获一个字符。该构造(.)+
表示“一个或多个捕获组,每个包含一个字符”。它只返回“d”,因为这是遇到的捕获组的最后一次迭代。
如果您在捕获组内移动重复(.+)
,则您将要求“包含一个或多个字符的捕获组”。这可能就是你想要的。
var pattern = /([^!=>< ]+)\s*([!=><]+)\s*(.+)/i;
将最后一个+
移到括号中:
var pattern = /([^!=>< ]+)\s*([!=><]+)\s*(.+)/i;
因为最后一对括号仅捕获最后一个匹配项。将 + 移到括号中:
/([^!=>< ]+)\s*([!=><]+)\s*(.+)/i;