2011-10-10 36 views
8

Tôi biết rằng tôi có thể tạo ra một javascript thay thế như thế này:JavaScript tạo regex lập trình

str = str.replace(/mytarget/g, 'some value');

rằng sẽ thay thế tất cả các lần xuất hiện của các literal mytarget. Tuy nhiên, tôi có một mảng lớn các từ/cụm từ mà tôi muốn sử dụng trong regex thay thế và regexps chỉ là các phần tử ngôn ngữ (chúng không được bao bọc trong chuỗi khi khai báo), tôi không thể tìm cách khai báo regexps lập trình trừ khi tôi mã hóa chúng. Vì vậy, nếu tôi có:

var arr=['word', 'another', 'hello'];

Tôi muốn sản xuất:

str = str.replace(/word/g, 'some value');

str = str.replace(/another/g, 'some value');

str = str.replace(/hello/g, 'some value');

Xin vui lòng gửi một ví dụ mà tôi có thể sử dụng regexps, như tôi sẽ thêm nhiều biểu thức hơn vào regexps chẳng hạn như khoảng trống, v.v. vì vậy tôi CẦN nó theo cách regexp. Cuối cùng, xin vui lòng không cung cấp sử dụng eval, tôi chắc chắn có một cách tốt hơn.

+0

Tại sao bạn sử dụng cụm từ thông dụng? Chỉ cần thực hiện [thay thế chuỗi đơn giản] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace). – Quentin

+0

và mẫu thay thế chỉ đơn giản là một regexp với những lý do tôi đã giải thích ở trên. –

Trả lời

13

Bạn cần gọi hàm hàm tạo RegExp cho điều đó. Ví dụ:

['word', 'another', 'hello'].forEach(function(word) { 
    var myExp = new RegExp(word, 'g'); 
    str = str.replace(myExp, 'some value'); 
}); 

Đối số đầu tiên cho hàm tạo là chuỗi, nghĩa là bạn sẽ bọc bất kỳ thứ gì bạn muốn quấn giữa //. Tham số thứ hai cũng là chuỗi, nơi bạn có thể chuyển đổi các biến tố như g, i, v.v.

0

Nếu bạn đang tạo ra reg-exp khi đang bay, bạn có thể sử dụng đối tượng RegExp

var a = new RegExp("word") 
3

Bạn có thể xây dựng một RegEx động như thế này -

var word = 'hello'; 
var re = new RegExp("\\b" + word + "\\b","g"); 

Hãy nhớ rằng bạn sẽ cần phải thoát khỏi bất kỳ ký tự nào \ sử dụng \\

2
for(i in arr) 
{ 
    str = str.replace(new RegExp("\\"+arr[i],"g"), "some value") 
}