2013-07-10 63 views
1

比方說,我有一個字符串替換爲***包圍文字與<b>和</b>

var myString: String = "This ***is*** my ***string***" 

現在我正在尋找一種方法以HTML的粗體標記,以取代明星。

更換後的代碼應該是這樣的:

"This <b>is</b> my <b>string</b> 

什麼我迄今所做的:

var boldPattern : RegExp = /\*\*\*.*?\*\*\*/; 

while(boldPattern.test(goalOv[gCnt][1])){ 
    myString = myString.replace(boldPattern, "<b>"+myString+"</b>"); 
} 

這與一個死循環結束了(因爲我指定的字符串本身)。

感謝

回答

1

我不擅長的正則表達式,但我認爲這簡單的解決方案將這樣的伎倆:

var boldPattern : RegExp = /(\*\*\*)/; 
var myString: String = "This ***is*** my ***string***"; 
var count:int = 0; 
while(boldPattern.test(myString)) 
{ 
    if(count % 2 == 1) 
     myString = myString.replace(boldPattern, "</b>"); 
    else 
     myString = myString.replace(boldPattern, "<b>"); 
    count++; 
} 
+0

謝謝你的解決方案! – Kesandal

+0

很高興我能提供幫助,但請注意,這不是最好的解決方案。 – Gio

2

正如吉奧所說,循環不更換的最佳途徑全球。您應該改爲執行以下操作以避免循環並在字符串上進行一次更換。

var boldPattern :String = "This ***is*** my ***string***"; 
var myString:RegExp = /\*\*\*([^*]*)\*\*\*/g; 
var replText:String = "<b>$1</b>"; 

myString = myString.replace(boldPattern, replText); 

另外,如果你想更準確地做到這一點,以便在MyString有有1或2 *的字符串,你可以使用:

/\*\*\*(([^*]+\*{0,2})+)\*\*\*/g