Подтвердить что ты не робот

Глобальные группы соответствия JavaScript Regex

Обновление: Этот вопрос представляет собой почти дубликат этого

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

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 regex? Очевидно, что я мог бы вырезать ' сам, но я ищу правильный способ сопоставления глобально подобранных группировок caputre с регулярным выражением.

4b9b3361

Ответ 1

Чтобы сделать это с помощью регулярного выражения, вам нужно будет перебрать его с помощью .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/

Ответ 2

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

m = input.match(/([^',]+)(?=')/g);
//=> ["Warehouse", "Local Release", "Local Release DA"]

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

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

(?<=').*?(?=')
  • (? = ') смотрит вперед для'
  • (? <= ') ищет "

проверить здесь