0

我有以下正则表达式:

var match = str.match(/^[^,]*,[^,]*,.*$/mg);

涵盖多行条目,例如

1234,john smith, john
4321, john smith2, jack, william@ab.com
8765, daniel, smith, rocks

在下面的演示链接中,当您粘贴我的示例的整个块(所有三行)时,您可以看到三个单独的警报,每次警报一行。

http://jsfiddle.net/TCMcp/2/

但是,不知何故,当我为具有两个列的条目尝试相同的正则表达式时,例如

3214, john
4321, jack

正则表达式不匹配,我在一个警报中得到整个块。

知道为什么吗?!

4

2 回答 2

4

让我们解析一下您的正则表达式的含义:

/^[^,]*,[^,]*,.*$/mg

/^      Match from the start of the line

[^,]*   Anything but a comma, 0 or more occurrences

,       One comma

[^,]*   Anything but a comma, 0 or more occurrences

,       One comma

.*      Any character or symbol, 0 or more occurrences

$       Match the end of the line

/m      Multiline

g       Global

我不确定您是否真的需要这些mg标志,但除此之外,您的问题是您的正则表达式需要两个逗号。基本上你可以把它浓缩成:

/^[^,]*,.*$/mg

这将匹配至少包含一个逗号的行。

于 2013-08-19T07:42:46.890 回答
1

如果您将逗号放在第二列之后,它将起作用,因为您的正则表达式匹配 2 个逗号。

如果你放第二个逗号可选,你可以修复正则表达式

/^[^,]*,[^,]*,?.*$/mg

如果您不想选择整个文本,请不要使用m正则表达式选项,因为它会在多行中匹配,在您的情况下,它会匹配\n中间有第二列的 3 列。

于 2013-08-19T07:41:36.550 回答