1

我正在尝试通过正则表达式拆分字符串并得到意外结果:

var str = 'name == abcd';
var pattern = /([^!=>< ]+)\s*([!=><]+)\s*(.)+/i;

pattern.exec(str);

该示例的结果是:[ "name == abcd", "name", "==", **"d"** ]

为什么"d"而不是"abcd"

4

3 回答 3

6

捕获组(.)只捕获一个字符。该构造(.)+表示“一个或多个捕获组,每个包含一个字符”。它只返回“d”,因为这是遇到的捕获组的最后一次迭代。

如果您在捕获组内移动重复(.+),则您将要求“包含一个或多个字符的捕获组”。这可能就是你想要的。

var pattern = /([^!=>< ]+)\s*([!=><]+)\s*(.+)/i;
于 2013-01-15T23:18:23.757 回答
3

将最后一个+移到括号中:

var pattern = /([^!=>< ]+)\s*([!=><]+)\s*(.+)/i;
于 2013-01-15T23:15:09.117 回答
2

因为最后一对括号仅捕获最后一个匹配项。将 + 移到括号中: /([^!=>< ]+)\s*([!=><]+)\s*(.+)/i;

于 2013-01-15T23:16:35.463 回答