2011-08-25 19 views
12

Theo trang này, phương pháp thay thế sau đây sẽ hoạt động, mặc dù tôi hoài nghi. http://www.bennadel.com/blog/55-Using-Methods-in-Javascript-Replace-Method.htmJavascript: Chuyển một hàm có kết quả phù hợp để thay thế (regex, func (arg)) không hoạt động

Mã của tôi là như sau:

text = text.replace( 
    new Regex(...), 
    match($1) //$.. any match argument passed to the userfunction 'match', 
       // which itself invokes a userfunction 
); 

Tôi đang sử dụng Chrome 14, và không có được thông qua bất kỳ thông số truyền cho phù hợp chức năng?

Cập nhật:

Nó hoạt động khi sử dụng

text.replace(/.../g, myfunc($1)); 

Các thông dịch viên JavaScript hy vọng một đóng cửa, - userfunctions rõ ràng dường như dẫn đến các vấn đề phạm vi nghĩa userfunctions thêm sẽ không được gọi. Ban đầu tôi muốn tránh đóng cửa để ngăn tiêu thụ bộ nhớ cần thiết, nhưng đã có các biện pháp bảo vệ.

Để vượt qua các đối số chức năng riêng của bạn làm điều đó như thế này (trong đó lập luận [0] sẽ chứa toàn bộ trận đấu:

result= text.replace(reg , function(){ 
     return wrapper(arguments[0]); 
}); 

Ngoài ra tôi đã có một vấn đề trong chuỗi-thoát và do đó RegEx biểu hiện như sau:

/\s......\s/g

là không giống như

new Regex ("\s......\s" , "g") hoặc 0.123. new Regex ('\s......\s' , "g")

vì vậy hãy cẩn thận!

+0

Ông có thể làm rõ những gì bạn có nghĩa là bằng cách sử dụng 'text.replace (/ .../g, myfunc ($ 1)); '? Tôi tin rằng thực sự không hoạt động, vì '$ 1' phải nằm trong một chuỗi. – JacobEvelyn

+0

Xem nhận xét của tôi về câu trả lời của Joe và tại đây để có ví dụ: https://github.com/lsauer/KeyBoarder/blob/master/keyboarder.js#L511 –

+0

Tôi vẫn không chắc mình hiểu. Sử dụng một hàm trong đó có ý nghĩa với tôi, nhưng hy vọng '$ 1' có giá trị thì không. – JacobEvelyn

Trả lời

35

$ 1 phải bên trong chuỗi:

"string".replace(/st(ring)/, "gold $1") 
// output -> "gold ring" 

với một chức năng:

"string".replace(/st(ring)/, function (match, capture) { 
    return "gold " + capture + "|" + match; 
}); 
// output -> "gold ring|string" 
+0

có, trong chuỗi $ 1 được phân tích bằng hàm thay thế. Trong ví dụ mã $ 1 chỉ là bất kỳ biến nào, được lấy từ ví dụ trong liên kết. --- Tốt nhất là nên vượt qua đối số [0], vì đối số cuối cùng sẽ chứa toàn bộ văn bản. –

+0

Mất một chút để quấn quanh đầu tôi, nhưng chính xác những gì tôi cần. – Twisty

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