Javascript заменить ссылкой на соответствующую группу?

228

У меня есть строка, например hello _there_. Я хотел бы заменить два подчеркивания на <div>и, </div>соответственно, используя JavaScript . Результат будет (следовательно) выглядеть следующим образом hello <div>there</div>. Строка может содержать несколько пар символов подчеркивания.

То , что я ищу способ либо запустить функцию на каждый матч, то , как Рубин делает это:

"hello _there_".gsub(/_.*?_/) { |m| "<div>" + m[1..-2] + "</div>" }

Или можете ссылаться на соответствующую группу, опять же, как это можно сделать в ruby:

"hello _there_".gsub(/_(.*?)_/, "<div>\\1</div>")

Есть идеи или предложения?

Синан Тайфур
источник

Ответы:

384
"hello _there_".replace(/_(.*?)_/, function(a, b){
    return '<div>' + b + '</div>';
})

О, или вы могли бы также:

"hello _there_".replace(/_(.*?)_/, "<div>$1</div>")
airportyh
источник
10
Использует ли Javascript $1вместо \1? Кто-нибудь предоставит ссылку на документацию?
Давелоялл,
3
replacementValueможет быть функцией и ей передаются разные аргументы, основанные на группах catch? Удивительный!
Давелоял
4
я обнаружил, что \ 1 сработало, но $ 1 не сработало, хотя я использую вариант RegExp: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
jsh
1
@CalculatorFeline Сказать «само регулярное выражение» не определяет, какой именно, поскольку кто-то может пытаться использовать регулярное выражение для замены. Там должно быть много людей, пытающихся сделать это "hello _there_".replace(/_(.*?)_/, /<div>\1<\/div>/).
Стюарт
2
Документация о функции заменяет developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Naramsim
35

Вы можете использовать replaceвместо gsub.

"hello _there_".replace(/_(.*?)_/g, "<div>\$1</div>")
Eifion
источник
19
Вы можете удалить обратную косую черту.
CalculatorFeline
7

Для строки замены и шаблона замены, как указано в $. вот резюме:

введите описание изображения здесь

ссылка на документацию: здесь

"hello _there_".replace(/_(.*?)_/g, "<div>$1</div>")



Примечание:

Если вы хотите иметь $в строке замены, используйте $$. То же, что и в системе сниппетов vscode.

Мохамед Аллал
источник