正则表达式问题,与两列的条目不匹配

时间:2013-08-19 07:35:55

标签: javascript regex

我有以下正则表达式:

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

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

知道为什么吗?!

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:1)

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

如果你使用第二个逗号

,你可以修复regexi
/^[^,]*,[^,]*,?.*$/mg

如果您不想选择全文,请不要使用m选项来使用regex,因为它会在multilne中匹配,在这种情况下,它匹配3列,其中第二列具有\n in中间。