我有以下正则表达式:
var match = str.match(/^[^,]*,[^,]*,.*$/mg);
涵盖多行条目,例如
1234,john smith, john
4321, john smith2, jack, william@ab.com
8765, daniel, smith, rocks
在下面的演示链接中,当您粘贴我的示例的整个块(所有三行)时,您可以看到三个单独的警报,每次警报一行。
然而,不知何故,当我为具有两个列的条目(例如
)尝试相同的正则表达式时3214, john
4321, jack
正则表达式与它不匹配,我在一个警报中得到整个块。
知道为什么吗?!
答案 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中间。