Javascript eşleşen gruba referansla değiştirilsin mi?


228

Benim gibi bir dizem var hello _there_. İki alt çizgiyi sırasıyla <div>ve JavaScript</div> kullanarak değiştirmek istiyorum . Çıktı (bu nedenle) şöyle görünecektir . Dize, birden çok alt çizgi çifti içerebilir.hello <div>there</div>

Ne aradığım bir yoludur ya her maç, Yakut öyle yolda bir işlevi çalıştırın:

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

Veya eşleşen bir gruba, yine ruby'de yapılabileceği şekilde başvurabilirsiniz:

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

Herhangi bir fikir veya öneriniz var mı?

Yanıtlar:


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

Ya da şunları da yapabilirsiniz:

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

10
Javascript $1yerine kullanıyor mu \1? Birisi belgelere bir bağlantı sağlar mı?
daveloyall

3
replacementValuebir işlev olabilir ve catch gruplarına göre farklı argümanlar geçirilir? İnanılmaz!
daveloyall

4
\ 1 çalıştı buldum ama RegExp varyasyon kullanıyorum rağmen 1 $ DEĞİL: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
jsh 1:15

1
@CalculatorFeline Birisi değiştirme için normal ifade kullanmaya çalışıyor olabileceğinden, "normal ifadenin kendisi" demek hangisini tanımlayamaz. Bunu yapmak için çalışıyor çok insan var olması gerekir: "hello _there_".replace(/_(.*?)_/, /<div>\1<\/div>/).
Stewart

2
İşlev değiştirme ile ilgili belgeler developer.mozilla.org/tr-TR/docs/Web/JavaScript/Reference/…
Naramsim

35

Bunun replaceyerine kullanabilirsiniz gsub.

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

19
Ters eğik çizgiyi kaldırabilirsiniz.
CalculatorFeline

7

Değiştirilen dize ve ile belirtilen değiştirme deseni için $. burada bir özgeçmiş:

resim açıklamasını buraya girin

doc bağlantısı: burada

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



Not:

Yeni bir $dize kullanmak istiyorsanız kullanın $$. Vscode snippet sistemi ile aynı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.