2013-04-22 52 views
15

假設我使用jQuery檢索<textarea>的值。那我該如何用JavaScript/jQuery替換一部分值呢?例如:JavaScript/jQuery字符串替換爲正則表達式

字符串:"Hey I'm $$zach$$"

<i>Zach</i>

更換$$zach$$,仍然保持了字符串的其餘部分完好?

+0

我看到你已經使用''<等在你的榜樣。你想用'<或'<'? – timss 2013-04-22 00:10:08

回答

31

使用一個正則表達式替換:

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

正則表達式的說明:

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

捕獲基團,則字符串'<i>$1</i>'中使用。 $1指的是正則表達式捕獲的組。

+0

如果例如,我「$$嗨大家$$」被替換? – Zach 2013-04-22 00:54:01

+0

@ user2059479 ok,固定 – Doorknob 2013-04-22 00:58:06

+0

不要忘記'/'後的'g'。 這工作時,我只加了這封信。 – 2015-09-15 20:30:02

3

使用字符串.replace方法就可以了。

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

-1沒有鏈接到jQuery的正則表達式參考 – 2014-01-13 21:00:49

8

使用此:

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

如果你想在jQuery的東西:

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

標記:

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

jsFiddle

把它包在功能最佳用途:

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

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

好像你想類似於降價語法。爲什麼不爲你的領域使用Markdown解析器而不是重新發明輪子?

Showdown JS正在積極開發之中,您將獲得與任何其他markdown語法相同的Markdown語法。

2

使用此,變更鏈接和標籤的擴展功能linkify:

String.prototype.linkify = function() { 
    var wikipediaPattern = /<wikipedia>(.+?)<\/wikipedia>/g; 
    return this.replace(wikipediaPattern, '<a href="http://fr.wikipedia.org/wiki/$1">$1</a>'); 
}