2012-12-05 33 views
11

Đây là vấn đề của tôi. Tôi có một chuỗi với trường hợp hỗn hợp trong đó. Tôi muốn tìm kiếm bất kể trường hợp nào và sau đó thay thế các kết quả khớp với một số ký tự ở hai bên của các trận đấu.Cách tìm kiếm thay thế bằng regex và giữ nguyên dạng gốc trong javascript

Ví dụ:

var s1 = "abC...ABc..aBC....abc...ABC"; 
var s2 = s.replace(/some clever regex for abc/g, "#"+original abc match+"#"); 

Kết quả trong s2 nên kết thúc như:

"#abC#...#ABc#..#aBC#....#abc#...#ABC#" 

này có thể được thực hiện với regex? Nếu vậy, làm thế nào?

Trả lời

25

Điều này có thể được thực hiện bằng cách sử dụng chức năng gọi lại để thay thế regex.

var s1 = "abC...ABc..aBC....abc...ABC"; 

var s2 = s1.replace(/abc/ig, function (match) { 
    return "#" + match + "#" ; 
} 
); 

alert(s2); 

demo: http://jsfiddle.net/dxeE9/

+0

Âm thanh đầy hứa hẹn, bạn có thể cho tôi một ví dụ – Graham

+0

Rực rỡ - cảm ơn bạn – Graham

+0

@Graham mỏ không phải là tàn bạo? ;-) Nó ngắn hơn và có lẽ nhanh hơn ;-) –

15

Điều này có thể được thực hiện bằng một back-tài liệu tham khảo:

var s2 = s.replace(/(your complex regex)/g, "#$1#") 

nếu bạn muốn kết hợp "abc" trong mọi trường hợp:

var s2 = s.replace(/(abc)/ig, "#$1#") 
+0

biểu thức regex là gì? – Graham

+0

@Graham giống như của bạn. Tôi cho rằng "abc" chỉ là một trình giữ chỗ cho một thứ khác mà bạn đã biết cách kết hợp. –

+0

Điều này cũng hoạt động - cảm ơn bạn – Graham

5

Bạn cũng có thể làm điều này

yourString.replace(/([a-z]+)/ig, "#$1#") 
+0

Điều này thay thế tất cả các lần xuất hiện với # abC# mà không phải là những gì tôi muốn – Graham

+0

@Graham bạn có thể xóa 'g' nếu bạn không muốn khớp tất cả các lần xuất hiện – Anirudha

Các vấn đề liên quan