Я использовал регулярное выражение "(.*?)"
, чтобы получить все, что находится между кавычками в строке. После выполнения операций над массивом, предоставленным exec()
, теперь у меня есть массив этих фрагментов, которые нужно вернуть в строку. Как я могу сопоставить этот массив обратно со строкой, используя регулярное выражение?
Я знаю о замене их всех одним конкретным значением, но я не уверен, как это сделать с массивом. Возможно, есть какая-то map()
функция, которую я могу использовать для pop()
значений из массива?
Я новичок в Deno и JS в целом (исходя из более низкого уровня), так что извините, если я просто пропустил документ или что-то в этом роде.
Когда вы выполняете замену регулярного выражения, замена может быть функцией, а не строкой. Функция может возвращать динамически определяемые результаты, поэтому она может выполнять поиск в массиве.
@MarcosCasagrande, в моем случае я пытаюсь проанализировать HTML и сопоставить все домены, включенные в другой домен. Вероятно, я мог бы обойти всю эту проблему с помощью другого шаблона проектирования. по сути, может быть что-то вроде этого: <a href = "https://example.com/foo">foo</a>
и я хочу превратить это в это: <a href = "https://example.org/?url=https://example.com/foo">foo</a>
@Barmar хорошо, наверное, должно сработать. какую функцию замены вы конкретно имеете в виду? (не тот, который нужно ввести, я имею в виду метод регулярного выражения)
result = str.replace(/regex/, (match, group1) => ...)
Вам не нужно использовать exec()
для этого. Просто используйте str.replace(/regexp/g, 'replacement string that uses $1 and $2')
, чтобы подставить группы захвата в результат.
Использование .replace с функцией замены — это самый простой способ добиться того, чего вы хотите.
const html = `
<a href = "https://example.com/foo">foo</a>
<div></div>
<a href = "https://example.net/foo">foo</a>
`;
const result = html.replace(/"(.*?)"/g, (match, group) => {
return `"https://example.org/?url=${group}"`;
});
console.info(result);
Вы также можете использовать строку замены с шаблоном замены $n
const html = `
<a href = "https://example.com/foo">foo</a>
<div></div>
<a href = "https://example.net/bar">bar</a>
`;
const result = html.replace(/"(.*?)"/g, `"https://example.org/?url=$1"`);
console.info(result);
Можете ли вы добавить пример ожидаемого ввода/вывода?