2009-08-04 26 views
7

Cho một cây kim và một đống cỏ khô ... Tôi muốn đặt các thẻ đậm quanh kim. Vì vậy, những gì biểu hiện regex tôi sẽ sử dụng với thay thế()? Tôi muốn SPACE là delimeter và tôi muốn tìm kiếm để được trường hợp nhạy cảmJavascript Regex: Làm thế nào để in đậm các từ cụ thể với regex?

nên nói kim là "bò" và các đống cỏ khô là

cows at www.cows.com, milk some COWS 

sẽ biến thành

<b>cows</b> at www.cows.com, milk some <b>COWS</b> 

cũng từ khóa sẽ có thể có khoảng trống trong đó, nếu từ khóa là "ai là mgmt" ...

great band. who is mgmt btw? 

sẽ biến thành

great band. <b>who is mgmt</b> btw? 

Cảm ơn

Trả lời

12

Đây là một regex để làm những gì bạn đang tìm kiếm:

(^|\s)(cows)(\s|$) 

Trong JS, thay thế là như vậy:

myString.replace(/(^|\s)(cows)(\s|$)/ig, '$1<b>$2</b>$3'); 

Wrapped lên gọn gàng trong một chức năng tái sử dụng:

function updateHaystack(input, needle) { 
    return input.replace(new RegExp('(^|\\s)(' + needle + ')(\\s|$)','ig'), '$1<b>$2</b>$3'); 
} 

var markup = document.getElementById('somediv').innerHTML; 
var output = updateHaystack(markup, 'cows'); 
document.getElementById('somediv').innerHTML = output; 
+0

+1 để lấy câu trả lời cuối cùng của tôi thêm một chút . :) – Amber

+0

có lỗi đánh máy không? chức năng boldKeywords (từ khóa, đống cỏ khô) { \t for (var c = 0; c $ 2 $ 3'); \t} \t trả lại haystack; } vì lý do nào đó mã không in đậm bất kỳ thứ gì. thanks – rawrrrrrrrr

+0

updateHaystack ('bò tại www.cows.com, sữa một số COWS', 'bò'); không in đậm bất cứ điều gì, nhưng updateHaystack ('bò tại www.cows.com, sữa một số COWS ',' bò '); thay đổi bò thành s – rawrrrrrrrr

1
findstring: /(^|\s)(cows)(\s|$)/ig 
newstring: '$1<b>$2</b>$3' 

Các dấu \ b là dành cho "ranh giới từ"; cờ/ig dành cho trường hợp bỏ qua và đối sánh toàn cục, tương ứng.

Việc sử dụng dấu() và sau đó $ 1/$ 2/$ 3 trong văn bản chuỗi mới để cách viết hoa và khoảng cách của bất kỳ nội dung nào phù hợp sẽ được giữ nguyên.

-1
var needle = 'cows'; 

var regexp = new RegExp('(^|\s)('+needle+')(\s|$)', 'ig'); 

var old_string = 'cows at www.cows.com, milk some COWs'; 

var new_string = old_string.replace(regexp, '<b>$1$2$3</b>'); 
+0

Ví dụ của bạn sẽ không hoạt động, bởi vì nó đòi hỏi một không gian để cả hai trước và theo kim, mà không phải là trường hợp cho bất kỳ trường hợp 'bò' trong old_string của bạn. – Amber

+0

Ông nói rằng ông muốn không gian như dấu phân cách. Để làm cho nó hoạt động với sự bắt đầu và kết thúc của chuỗi nó có thể là '(^ | \ s)' + needle + '(\ s | $)' không được thử nghiệm nhưng tôi nghĩ rằng nên làm việc –

9

Đối với những người không cảm thấy sợ hãi t SPACE làm dấu tách, chỉ cần không sử dụng \s.

function updateHaystack(input, needle) 
{ 
return input.replace(new RegExp('(^|)(' + needle + ')(|$)','ig'), '$1<b>$2</b>$3'); 
} 

Làm việc cho tôi.

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