2016-10-12 18 views
6

Làm cách nào để thực hiện tìm kiếm chuỗi thích hợp và thay thế bằng JavaScript hoàn toàn không có REGEX?Cách thực hiện tìm kiếm chuỗi "thô" và thay thế bằng JavaScript, không có REGEX

Tôi biết các tài liệu nói rằng nếu đối số đầu tiên là String.prototype.replace() là một chuỗi, chứ không phải là regex, thì nó sẽ thay thế bằng chữ. Thực hành cho thấy là không hoàn toàn đúng:

"I am a string".replace('am', 'are') 
--> "I are a string" 

OK

"I am a string".replace('am', 'ar$e') 
--> "I ar$e a string" 

Tuy OK

"I am a string".replace('am', 'ar$$e') 
--> "I ar$e a string" 

KHÔNG OK!

Dấu đô la thứ hai ở đâu? Nó đang tìm kiếm một cái gì đó như $1 để thay thế bằng một trận đấu từ REGEX ... mà không bao giờ được sử dụng?

Tôi rất bối rối và thất vọng, bất kỳ ý tưởng nào?

+0

Các ký hiệu đô la thứ hai được ăn xa vì [này] (https: //developer.mozilla .org/en-US/docs/Web/JavaScript/Tham chiếu/Global_Objects/Chuỗi/thay thế # Specifying_a_string_as_a_parameter). –

+0

Câu hỏi vẫn còn là, tại sao những quirks này thậm chí còn hoạt động kể từ khi tôi không sử dụng regex ở nơi đầu tiên? Dường như chỉ là ngu ngốc với tôi. –

+0

@TonyBogdanov vì nó được định nghĩa theo cách đó trong [15.5.4.11 String.prototype.replace (searchValue, replaceValue)] (http://www.ecma-international.org/ecma-262/5.1/#sec-15.5.4.11). Nếu bạn muốn biết tại sao api được thiết kế theo cách đó, thì bạn sẽ cần hỏi những người liên quan đến quyết định này. Nhưng ngay cả khi bạn không sử dụng regex, nó có thể hữu ích cho ví dụ. chèn một số char vào một chuỗi nhất định dựa trên giá trị tìm kiếm: '" test 1234 ".replace (" 12 "," $ &-"); ' –

Trả lời

4

Nếu bạn sử dụng replace callback chứ không phải là một chuỗi chữ, regex thay tự động sẽ không được thực hiện:

"I am a string".replace('am',() => 'ar$$e') 
+0

Hoặc một cách khác:' "Một số chuỗi TOKEN" .split ('TOKEN'). 'ar $$ e') ' –

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