2013-10-07 3 views
1

я не могу получить этот захват, чтобы работать, как хотелось бы:Regex захвата: получить весь матч в группе захвата

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

var regex = /(_)?;([\w]+);([\w]+);/; 
var string = "____;foo;bar;"; 
var matches = regex.exec(string); 

console.log(matches); // outputs ["_;foo;bar;", "_", "foo", "bar"] 

Как вы можете видеть, matches[1] содержит группу захвата для дефолтов, но дает мне совпадающий символ, а не все символы подчеркивания. Я бы ожидал такого результата:

["_;foo;bar;", "_____", "foo", "bar"] 

Есть ли способ достичь этого с помощью регулярного выражения? Я предпочел бы избежать раскола строку с ; ...

ответ

1

Вы можете использовать шаблон, как это:

/(_*);(\w+);(\w+);/ 

Который даст вам:

["_____;foo;bar;", "_____", "foo", "bar"] 

Эта модель будет соответствовать следующей последовательности :

  • 0 или более символов, отмеченных в группе 1
  • точки с запятой
  • один или несколько символов слова, захваченные в группе 2
  • точки с запятой
  • один или нескольких символов слова, захваченные в группе 3
  • точка с запятой
+0

Спасибо за ваши ясный ответ, вот что мне нужно. – mguimard

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