Извлечение строк в двойных кавычках из строки без самих кавычек

#javascript #regex

#javascript #регулярное выражение

Вопрос:

Предположим, у меня есть строка типа 'there goes "something here", and "here" and I have "nothing else to say"' . Мне нужно регулярное выражение для точного извлечения ['something here', 'here', 'nothing else to say'] . Обратите внимание, что результаты не экранируются кавычками, это потому, что я не хочу делать второй вызов для replace(/"/g, '') при каждом совпадении.

Для справки, это:

 'there goes "something here", and "here" and I have "nothing else to say"'.match(/".*?"/g)
  

Дает мне это:

 ['"something here"', '"here"', '"nothing else to say"']
  

Однако, как я уже сказал, я не хочу, чтобы результаты были заключены в кавычки и выполняли replace вызов для каждого результата.

Ответ №1:

Это должно сработать "([^"]*)"
и вот пример теста:https://regex101.com/r/CjK2fp/1

Комментарии:

1. Спасибо за ваше время, хотя ответы должны быть в JavaScript и возвращать массив.

Ответ №2:

Для случаев, когда после первой кавычки должна быть w :

 string = 'there goes "something here", and "here" and I have "nothing else to say"';
regexp = /(?<=")w.*?(?=")/g
result = string.match(regexp);
console.log(result);  

Учет того, что между кавычками и содержимым должен быть интервал:

 let string = 'there goes " something here ", and "here" and I have "nothing else to say"';

function everyOther(string) {

let regexp = /(?<=").*?(?=")/g

let answerArray = [];

for (; ; ) {
    if (regexp.lastIndex !== 0) {
        regexp.lastIndex  = 2;
    }
    let matchArr = regexp.exec(string);
    if (regexp.lastIndex === 0) { 
        break;
    } 
    let match = matchArr[0]
    answerArray.push(match);
}

console.log(answerArray);

}

everyOther(string);  

Комментарии:

1. Эй, спасибо, что уделили мне время! Я только что обновил свой вопрос, содержащий то, что я пробовал, и это в значительной степени ваш подход 🙂

2. Хорошо, значит, вы хотите, чтобы это выглядело точно так ['something here', 'here', 'nothing else to say'] ? Попробую!

3. Точно. В результирующем массиве кавычек нет. Я только что заставил это работать, но решение выглядит красиво… экзотика: Array.from('the string here'.matchAll(/"([^"] )"/g), e => e[1]) Я ищу другие решения.

4. @Henri Скажи мне, все ли в порядке. Рад также объяснить

5. Это работает для данной строки, но это приведет к сбою в следующем: 'there goes " something here"' , например.

Ответ №3:

Используя некоторые из новейших функций JS

 let reg = /"(.*?)"/gi;
let results = str.matchAll(reg);

// results - is not an array, but an iterable object
// convert results to an Array
results =  Array.from(results); 

// using map method to get second items from each array item
// which is a captured group
results = results.map(item => item[1]);
  

Дополнительная информация => javascript.info ::: Сопоставлять все с группами