2012-03-28 76 views
2

我有這樣的樣本串,我想有一個開口,以取代明星和關閉使用JavaScript的正則表達式較強的觸殺:正則表達式替換字符的HTML標籤

To increase search results, use the 8** prefix. 
877 and 866 will result in more matches than 800 and 888 prefixes. 
*Note*: The pattern for a custom number can be more than 7 digits. For example: 1-800-Mat-tres(s) 

理想的輸出將是:

To increase search results, use the 8** prefix. 
877 and 866 will result in more matches than 800 and 888 prefixes. 
<strong>Note</strong>: The pattern for a custom number can be more than 7 digits. For example: 1-800-Mat-tres(s) 

唯一需要注意的是,如果連續有兩個開頭(如8 **),那麼它們不會被強標籤取代。

非常感謝您的幫助。

+1

你有沒有在自己所有嘗試新鮮事物? – 2012-03-28 22:32:00

+1

@AdamZalcman好點。我需要更多地鼓勵。 – Kyle 2012-03-28 22:40:28

+0

是的,我試過 var thisContent = thisContent.replace(/\*(.*?)\*/ g,'$&'); – SkyOut 2012-03-29 13:38:36

回答

3

也許你可以嘗試這樣的事情?

\*(\S[^\*]+\S)\* 

+指1或更多,所以如果存在*之間的事情將只匹配。

[^\*]意味着任何不是明星*

UPDATE 我已經更新了上述正則表達式來指定,它並沒有非空白字符的在*和每場比賽的第一個和最後一個字符之間不匹配。該防止的不正確地匹配下面重點介紹一下:

8 * * prefix. 877 and 866 will result in more matches than 800 and 888 prefixes. *注*

這裏是一樣的正則表達式與評論(在JavaScript)

"\\*" +  // Match the character 「*」 literally 
"\\S" +  // Match a single character that is a 「non-whitespace character」 
"[^\\*]" + // Match any character that is NOT a * character 
    "+" +  // Between one and unlimited times, as many times as possible, giving back as needed (greedy) 
"\\S" +  // Match a single character that is a 「non-whitespace character」 
"\\*"   // Match the character 「*」 literally 

最後,這裏是JavaScript的一個例子你可以使用:

yourStringData.replace(/\*(\S[^\*]+\S)\*/g, "<strong>$1</strong>"); 

只需更換yourStringData具有可變包含數據要運行取而代之。

+0

這個正則表達式非常好。我發現的唯一問題是,它並沒有刪除那裏的原始明星。所以內容被合適地包裹在強標籤中,但星星仍然在裏面。 – SkyOut 2012-03-29 13:41:14

+0

更具體地說,這是我正在使用的替換: 'code'var thisContent = thisContent.replace(/ \ * \ S [^ \ *] + \ S \ */g,「$&」); '代碼' – SkyOut 2012-03-29 13:58:26

+0

@SkyOut我認爲你在替換中獲得'*'的原因是它需要一個圍繞'\ S'添加的組,如下所示:'\ *(\ S [^ \ * ] + \ S)\ *' - 我想....讓我知道這是否有效。 – Robbie 2012-03-29 16:12:32

3

如果總是有*的之間:

your_string.replace(/\*(\w+)\*/g, "<strong>$1</strong>"); 
+0

請注意,如果還有其他問題,在''''''''''''''''''''''空間或任何類型的標點符號之間(我想這會是?)。它也會匹配'**'和'* text *'的開頭之間的任何內容 - 這與它應該匹配的內容相反 – Robbie 2012-03-29 09:33:05