2013-04-22 42 views
15

Giả sử tôi lấy giá trị của một số <textarea> bằng jQuery. Làm thế nào tôi có thể thay thế một phần của giá trị bằng cách sử dụng JavaScript/jQuery. Ví dụ:Chuỗi JavaScript/jQuery Thay thế bằng Regex

chuỗi: "Hey I'm $$zach$$"

thay $$zach$$ với <i>Zach</i>

Và vẫn giữ phần còn lại của chuỗi nguyên vẹn?

+0

Tôi thấy rằng bạn đã sử dụng '' < vv trong ví dụ của bạn. Bạn có muốn sử dụng '<' hoặc '<'? – timss

Trả lời

31

Dùng regex thay thế:

yourTextArea.value = yourTextArea.value.replace(/\$\$(.+?)\$\$/, '<i>$1</i>') 

Giải thích về regex:

\$\$ two dollar signs 
( start a group to capture 
.  a character 
+  one or more 
?  lazy capturing 
)  end the group 
\$\$ two more dollar signs 

Nhóm chụp sau đó được sử dụng trong chuỗi '<i>$1</i>'. $1 là nhóm mà regex đã chụp.

+0

nếu ví dụ, tôi "$$ hi everyone $$" sẽ được thay thế? – Zach

+0

@ user2059479 ok, đã sửa – Doorknob

+0

Đừng quên 'g' sau '/'. Điều đó hiệu quả khi tôi chỉ thêm chữ cái này. –

3

Sử dụng chuỗi .replace phương pháp sẽ thực hiện.

.replace(/\$\$(.*?)\$\$/g, '<I>$1</I>') 
+2

-1 không có liên kết đến tham chiếu jQuery regex –

8

Sử dụng này:

str.replace(/\${2}(.*?)\${2}/g, "<I>$1</I>"); 
\${2} matches two $ characters 
(.*?) matches your string to be wrapped 
\${2} same as above 
/g matches globally 

jsFiddle

Nếu bạn muốn một cái gì đó trong jQuery:

$("#txt").val().replace(/\${2}(.*?)\${2}/g, "<I>$1</I>"); 

Markup:

<textarea id="txt">I'm $$Zach$$</textarea> 

jsFiddle

Wrap nó trong một hàm để sử dụng tốt nhất:

var italics = function (str) { 
    return str.replace(/\$\$(.*?)\$\$/g, "<I>$1</I>"); 
} 

italics($("#txt").val()); 

Có vẻ như bạn muốn thực hiện một cú pháp tương tự như Markdown. Tại sao không chỉ sử dụng trình phân tích cú pháp Markdown cho các trường của bạn thay vì phát minh lại bánh xe?

Showdown JS được tích cực phát triển và bạn nhận được cú pháp Markdown giống như bất kỳ cú pháp markdown nào khác.

2

Sử dụng này, liên kết thay đổi và tag cho chức năng linkify mở rộng:

String.prototype.linkify = function() { 
    var wikipediaPattern = /<wikipedia>(.+?)<\/wikipedia>/g; 
    return this.replace(wikipediaPattern, '<a href="http://fr.wikipedia.org/wiki/$1">$1</a>'); 
} 
Các vấn đề liên quan