Javascript thay thế bằng tham chiếu đến nhóm phù hợp?


228

Tôi có một chuỗi, chẳng hạn như hello _there_. Tôi muốn thay thế hai dấu gạch dưới bằng <div></div>tương ứng, bằng cách sử dụng JavaScript . Đầu ra sẽ (do đó) trông như thế nào hello <div>there</div>. Chuỗi có thể chứa nhiều cặp dấu gạch dưới.

Những gì tôi đang tìm kiếm là một cách để hoặc là chạy một chức năng trên mỗi trận đấu, cách của Ruby làm nó:

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

Hoặc có thể tham chiếu một nhóm phù hợp, một lần nữa cách nó có thể được thực hiện trong ruby:

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

Bất kỳ ý tưởng hoặc đề xuất?

Câu trả lời:


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

Ồ, hoặc bạn cũng có thể:

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

10
Javascript có sử dụng $1thay thế \1không? Ai đó sẽ cung cấp một liên kết đến tài liệu?
daveloyall

3
replacementValuecó thể là một hàm và nó được truyền các đối số khác nhau dựa trên các nhóm bắt? Kinh ngạc!
daveloyall

4
tôi tìm thấy \ 1 làm việc nhưng $ 1 không mặc dù tôi đang sử dụng các biến thể RegExp: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
JSH

1
@CalculatorFeline Nói "chính regex" không xác định cái nào, vì ai đó có thể đang cố sử dụng regex để thay thế. Phải có nhiều người cố gắng làm điều này : "hello _there_".replace(/_(.*?)_/, /<div>\1<\/div>/).
Stewart

2
Tài liệu về chức năng thay thế developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
Kẻ

35

Bạn có thể sử dụng replacethay vì gsub.

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

19
Bạn có thể loại bỏ dấu gạch chéo ngược.
Máy

7

Đối với chuỗi thay thế và mẫu thay thế theo quy định của $. đây là một bản lý lịch:

nhập mô tả hình ảnh ở đây

liên kết đến doc: tại đây

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



Ghi chú:

Nếu bạn muốn có một $chuỗi thay thế sử dụng $$. Tương tự như với hệ thống đoạn mã vscode.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.