2013-11-11 3 views
23

Update: Этот вопрос является почти копией thisJavaScript Regex Глобальные Совпадение Группы

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

var input = "'Warehouse','Local Release','Local Release DA'"; 
var regex = /'(.*?)'/g; 

console.log(input.match(regex)); 

// Actual: 
// ["'Warehouse'", "'Local Release'", "'Local Release DA'"] 

// What I'm looking for (without the '): 
// ["Warehouse", "Local Release", "Local Release DA"] 

Есть ли чистый способ сделать это с помощью JavaScript регулярных выражений? Очевидно, я мог бы вырезать сам ', но я ищу правильный путь к глобальным сопоставлениям caputre с регулярным выражением.

+1

возможный дубликат [Как получить доступ к сопоставленным группам в регулярном выражении javascript?] (Http://stackoverflow.com/questions/432493/how-do-you-access-the-matched-groups-in-a-javascript-regex) – Barmar

+0

Да, это определенно дубликат, я не был уверен, как искать мой вопрос:/ – Jondlm

+0

Я нашел его, выполнив поиск _ [javascript] [regex] глобальная группа захвата_. – Barmar

ответ

55

Чтобы сделать это с помощью регулярного выражения, вам нужно будет перебрать его с помощью .exec(), чтобы получить несколько согласованных групп. Флаг g с совпадением возвращает только несколько целых совпадений, а не несколько подзаголовков, как вы хотели. Вот как это сделать: .exec().

var input = "'Warehouse','Local Release','Local Release DA'"; 
var regex = /'(.*?)'/g; 

var matches, output = []; 
while (matches = regex.exec(input)) { 
    output.push(matches[1]); 
} 
// result is in output here 

Работа демо: http://jsfiddle.net/jfriend00/VSczR/


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

var input = "'Warehouse','Local Release','Local Release DA'"; 
var output = input.replace(/^'|'$/, "").split("','"); 

Работа демо: http://jsfiddle.net/jfriend00/MFNm3/

+1

Почему downvote? – jfriend00

+0

Это именно то, что я искал. Благодаря! Answer credit incoming ... – Jondlm

+0

Добавлен способ не регулярного выражения, чтобы это сделать. – jfriend00

2

Try что-то вроде input.replace(regex, "$1"), чтобы получить результаты вашего группы захвата.

+1

Чтобы попасть в массив - 'input.replace (regex,« $ 1 »). Split (',')' – levi

+0

OP хочет получить результат в массиве. – jfriend00

+0

Мне нравится ваше мышление, предполагая, что в нем нет '' '' '' ''. – Jondlm

-3

EDIT: Это не будет работать в javascript, но оно работает в java. Извините, что.

да, это называется "смотреть вперед" и "оглядываться"

(?<=').*?(?=') 
  • (? = ') Смотрит вперед для'
  • (? < =») выглядит сзади за "

проверить его here

+0

in javascript там не выглядит. – Techsin

+0

О, пожалуйста, прочитайте и обратите внимание на комментарии. – anubhava

+0

Так зачем же писать это, зная, что это не работает в Javascript? В противном случае люди задавали бы тег Java. Побуждение нищего ... –

0

это регулярное выражение работает, но с определенными символами ...

var input = "'Warehouse','Local Release','Local Release DA'"; 

var r =/'[\w\s]+'/gi; 
console.log(input.match(regex)); 
+0

В результате получается одиночная кавычка в результате, чего не хочет OP. – jfriend00

4

Не очень общее решение, так как не назад 'поддерживается в Javascript, но для данного входа это регулярное выражение должно работать:

m = input.match(/([^',]+)(?=')/g); 
//=> ["Warehouse", "Local Release", "Local Release DA"] 
Смежные вопросы