Javascript замінити з посиланням на відповідну групу?


228

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

Що я шукаю, це спосіб або запустити функцію в кожному матчі, як Ruby це робить:

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

Або мати можливість посилатися на відповідну групу, знову ж таки, як це можна зробити в рубіні:

"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? Хтось надасть посилання на документацію?
daveloyall

3
replacementValueможе бути функцією, і передаються різні аргументи на основі груп улову? Дивовижний!
daveloyall

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

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

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

посилання на doc: тут

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



Примітка:

Якщо ви хочете мати $рядок заміни, використовуйте $$. Те саме, що і з фрагментом системи vscode.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.