如何获得一个正则表达式,匹配任何包含两个或更多逗号的字符串?
我想通过举例来更好地解释应该匹配和不应该匹配的内容。
abcd,ef // Nop
abc,de,fg // Yup
// This is what I have so far, but it only matches consecutive commas
var patt = /\,{2,}/;
我对正则表达式不是很熟悉,也没有找到有用的东西。希望能得到帮助。
如何获得一个正则表达式,匹配任何包含两个或更多逗号的字符串?
我想通过举例来更好地解释应该匹配和不应该匹配的内容。
abcd,ef // Nop
abc,de,fg // Yup
// This is what I have so far, but it only matches consecutive commas
var patt = /\,{2,}/;
我对正则表达式不是很熟悉,也没有找到有用的东西。希望能得到帮助。
这将匹配至少有两个逗号(不是冒号)的字符串:
/,[^,]*,/
上面的表达式表示“匹配逗号,后跟任意数量的非逗号字符,再后跟另一个逗号”。你也可以使用下面这个表达式:
/,.*?,/
.*?
类似于.*
,但它尽可能匹配少的字符而不是尽可能多的字符。这被称为“勉强”限定符。(希望你所选择的语言支持它们!)
有人建议使用/,.*,/
。这是一个非常糟糕的想法,因为它会一直在整个字符串上搜索,而不是在找到前两个逗号后停止。如果字符串很大,这可能会非常慢。
,.*,
可能更合适。 - mpen.*?
被称为“懒惰匹配”(与“贪婪匹配”相对)。我对于,.*?,
比贪婪版本更高效还是更低效持怀疑态度;我想这取决于实现和使用的方法。例如,“test”或“IsMatch”函数(返回布尔值而不是匹配对象)应该在第一次匹配时退出。当然,需要进行性能测试,但说“远远更高效”有点大言不惭。在大多数情况下,我们谈论的是不到一毫秒的时间。 - mpen如果你想要得到一个给定字符串中逗号的数量,只需使用 /,/g,并获取匹配的长度
'a,b,c'.match(/,/g); //[',',','] length equals 2<br/>
'a,b'.match(/,/g); //[','] length equals 1<br/>
'ab'.match(/,/g) //result is null
'a,b,c'.match(/,/g).length >= 2
会提供OP想要的结果。 - mpen