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>")

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>")

19
Вы можете удалить обратную косую черту.
CalculatorFeline

7

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

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

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

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



Примечание:

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.