2012-02-13 2 views
4

Как получить регулярное выражение, которое соответствует любой строке, содержащей две или более запятых?
Я думаю, что это лучше всего объяснить на примере того, что должно соответствовать, и что не должноRegEx соответствует двум или более одинаковым символам, не последовательным

abcd,ef // Nop 
abc,de,fg // Yup 

// This is what I have so far, but it only matches consecutive commas 
var patt = /\,{2,}/; 

Я не так хорошо с регулярным выражением и я не мог найти что-нибудь полезное. Любая помощь приветствуется.

+0

Вы говорите, вы не хотите последовательных колоны, чтобы соответствовать? (Или просто это все, что вам удалось сопоставить до сих пор?) Ваши примеры не охватывают его в любом случае. И вы ищете двоеточия (:) или запятые (,)? – nnnnnn

+0

О, запятые, опечатка. Я ищу, чтобы соответствовать любой строке, которая имеет две или более запятых независимо от того, где они находятся. – elclanrs

ответ

13

Это будет соответствовать строке, по крайней мере, 2 запятыми (не колоны):

/,[^,]*,/

Это просто говорит «соответствуют запятая, а затем любое число без запятой символов, а затем другая запятая ". Вы также можете сделать это:

/,.*?,/

.*?, как .*, но он соответствует , как несколько символов, насколько это возможно, а не столько, насколько это возможно. Это называется «неохотным» квалификатором. (Я надеюсь, что регулярные выражения на вашем языке выбора будут поддерживать их!)

Кто-то предложил /,.*,/. Это очень плохая идея, потому что она всегда будет работать над всей строкой, а не останавливаться при первых двух запятых. если строка огромна, это может быть очень медленным.

+0

OMG спасибо! Серьезно, я не мог понять этого. Можете ли вы немного объяснить, почему это работает? Я везде искал ответы и до сих пор не могу обернуть вокруг себя голову. Я приму ваш ответ через 5 минут, просто не могу сейчас. – elclanrs

+0

О, я думаю, я знаю, почему ... Забавно, что я задал этот вопрос, чтобы решить другой. – elclanrs

+1

Он просто сказал «две или более запятых», он не сказал, что их нужно разделять запятой. Таким образом, ',. *,' Может быть более подходящей. – mpen

1

, если вы хотите, чтобы получить количество запятых в данной строке, просто используйте /,/г, и получить длину матча

'a,b,c'.match(/,/g); //[',',','] length equals 2<br/> 
'a,b'.match(/,/g); //[','] length equals 1<br/> 
'ab'.match(/,/g) //result is null 
+0

'' a, b, c'.match (/,/g) .length> = 2' даст ОП, что он хотел – mpen

Смежные вопросы