Vấn đề hàm String.replace() của javascript chỉ replace một lần mà thôi.
Đăng trong danh mục Javascript bởi admin | Tags: Javascript, jquery, PHP, prototype, regex, string
Tình cờ phát hiện hàm String.replace() của javascript chỉ replace lần xuất hiện đầu tiên mà thôi. Ví dụ:
1 2 3 | var myString = 'my blog of my friend here'; alert(myString.replace('my', 'his')); //output : "his blog of my friend here" . Not "his blog of his friend here". |
xem ví dụ cũng đã hiểu, phrase “my” chỉ bị thay thế một lần mà thôi, hix hix..điều này đôi khi bạnkhông muốn vì đã replace thì replace cho hết luôn chứ (ví dụ như hàm str_replace() của PHP sẽ thay thế toàn bộ)
- Để giải quyết vấn đề này trước mắt mình thấy có 2 cách, cách hay sử dụng nhất là sử dụng regex pattern thay cho search string, mình sửa lại như sau thì sẽ có kết quả như ý muốn:
1 | alert(myString.replace(/my/g, 'his')); //output : "his blog of his friend here". |
Trong nhiều trường hợp mình không dùng cách sử dụng pattern được, thì có một giải pháp khác, đó là add thêm hàm replaceAll vào String object để sau này dùng. Cái hàm này chôm của một kiếm khách nào đó trên giang hồ. Cách này nên sử dụng cẩn thận, vì có thể sẽ bị infinitive loop nếu dùng không cẩn thận.
Prototype của nó như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | // Replaces all instances of the given substring. String.prototype.replaceAll = function( strTarget, // The substring you want to replace strSubString // The string you want to replace in. ){ var strText = this; var intIndexOfMatch = strText.indexOf( strTarget ); // Keep looping while an instance of the target string // still exists in the string. while (intIndexOfMatch != -1){ // Relace out the current instance. strText = strText.replace( strTarget, strSubString ) // Get the index of any next matching substring. intIndexOfMatch = strText.indexOf( strTarget ); } // Return the updated string with ALL the target strings // replaced out with the new substring. return( strText ); } |
Sau khi khai báo prototype này, thì bạn chỉ cần sử dụng như sau
1 | alert(myString.replaceAll('my', 'his')); //output : "his blog of his friend here". |
———-
Hy vọng chút ít kinh nghiệm sẽ giúp các bạn trong tương lai.
Bình luận mới nhất
- Chuẩn bị gì để thi chứng chỉ Zend PHP5 ZCE?
"Huynh cho em hỏi, cái chứng chỉ trên W3school thì có tốt không và VN c" - Kiến Hâu - Harveynash - 2 tháng quân trường
"Đọc cái bài này của Tuấn lâu rồi. Không ngờ bây giờ mình làm vào làm c" - Dung - Harveynash - 2 tháng quân trường
"A.Tuấn ơi, ngày mai em có buổi phỏng vấn ở Harvey Nash, vị trí nv tư v" - Sherry Ng - Cài đặt Web Server cho Amazon EC2 Instance [Video Clip]
"rất đầy đủ cảm ơn nhé .. thích nhất là cái Video dễ hiểu" - Truyen cuoi hay - Cài đặt Web Server cho Amazon EC2 Instance [Video Clip]
"Bài viết chi tiết. Và EC2 có phải là giải pháp cho doanh nghiệp vừa và" - Hieu Doan - Cài đặt Web Server cho Amazon EC2 Instance [Video Clip]
"Bài viết rất chi tiết :)" - Nguyen Hoang Viet - SQLite với PDO và PHP
"Chào anh. Xin anh cho em hỏi nếu em có 1 file .sqlite rồi, em muốn add" - Nguyễn Văn Nghĩa - phpmailer gởi mail SMTP bằng Gmail/Google Apps
"Mình gửi mail với nội dụng bằng ckeditor có chèn hình ảnh. khi luôn x" - Minh Tiến - phpmailer gởi mail SMTP bằng Gmail/Google Apps
"Cảm ơn bác rất nhiều về bài viết :))" - Lê Trường Giang - APC và Segmentation Fault
"Bác này giống mình quá, Mình cũng vừa mua 1 em VPS, cài APC cũng cái l" - Phan Nam Thắng
Danh mục
- android (3)
- Business (25)
- Flash (1)
- Graphic Design (16)
- IT Guys (1)
- Javascript (9)
- Miscellaneous (58)
- Photography (9)
- PHP (43)
- Review sách (13)
- Search Engine Optimization (2)
- security (3)
- software (5)
- User Interface Design & Usability (8)
- Web Design (28)
- Web Programming (52)
Lưu trữ
- September 2012 (1)
- May 2012 (2)
- March 2012 (2)
- February 2012 (1)
- January 2012 (1)
- December 2011 (1)
- November 2011 (2)
- September 2011 (2)
- August 2011 (1)
- July 2011 (4)
- June 2011 (2)
- May 2011 (2)
- April 2011 (2)
- March 2011 (2)
- February 2011 (2)
- January 2011 (4)
- December 2010 (6)
- November 2010 (3)
- October 2010 (3)
- September 2010 (5)
- August 2010 (6)
- July 2010 (5)
- June 2010 (2)
- May 2010 (5)
- April 2010 (7)
- March 2010 (8)
- February 2010 (4)
- January 2010 (10)
- December 2009 (12)
- November 2009 (12)
- October 2009 (15)
- September 2009 (16)
- August 2009 (11)
- July 2009 (15)
- November 2008 (1)
- October 2008 (1)
- September 2008 (3)

