2013-07-10 62 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