Глобальные группы соответствия 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 с регулярным выражением.
Ответы
Ответ 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. Извините, что.
да, он назвал "смотреть вперед" и "заглянуть за"
(?<=').*?(?=')
- (? = ') смотрит вперед для'
- (? <= ') ищет "
проверить здесь