2012-09-03 47 views
0

我有一個字符串,看起來像這樣:使用正則表達式來修改字符串

Blah blah one.<tmp>[[url=b, link=c]]</tmp> Blah blah two. 
Also remember, blah blah three.<tmp>[[url=d, link=e]]</tmp> 

所以我想bd(的tmpurl屬性),並更改String,它看起來像這(在ex()函數返回一個字符串):

Blah blah one.<tmp>[[url=b, link=c, add=ex(b)]]</tmp> Blah blah two. 
Also remember, blah blah three.<tmp>[[url=d, link=e, add=ex(d)]]</tmp> 

我需要,因爲沒有現有的庫解析這類標記的使用正則表達式。

我希望我的解釋清楚。

在此先感謝!

+2

1. [你有什麼嘗試?](http://whathaveyoutried.com)2.這需要一個完整的解析器,而不是正則表達式。 –

+0

對不起,不必編輯。我改變了代碼引用來阻止引用,並沒有注意到標籤是不可見的。 – some

回答

0

試試這個

var text = "Blah blah one.<tmp>[[url=b, link=c]]</tmp> Blah blah two."; 
text.replace(/(url=([^,]+), [^\]]+)/g, "$1, add=ex($2)"); 

// return "Blah blah one.<tmp>[[url=b, link=c, add=ex(b)]]</tmp> Blah blah two." 

UPDATE:

// declare your ex() function first 
var text = "Blah blah one.<tmp>[[url=b, link=c]]</tmp> Blah blah two."; 
text.replace(/(url=([^,]+), [^\]]+)/g, function(){ 
    return RegExp.$1 +", add="+ex(RegExp.$2)+""; 
}); 
+0

好的,到目前爲止它已經在爲我工作了,'add = ex(b)'被添加到String中,但是'ex()'是一個函數。如何將'b'傳遞給它,然後使用返回值來執行'add = returnedValue'?謝謝! –

+0

@ChristineDehner哦,我現在明白了。我會更新我的答案 – Rezigned

+0

太好了,非常感謝! –

0

嘗試:

var str = "Blah blah one.<tmp>[[url=http://www.google.com, link=c]]</tmp> Blah blah two."; 
var tempRe = /(<tmp>\[\[url=)([^,]+)(link=[^\]]\])(, \]<\/tmp>)/; 

var newStr = str.replace(tempRe, '$1$2$3,add=ex($2)$4'); 

這將只替換內部<tmp></tmp>字符串。

+0

我猜他的ex函數返回一個字符串 – Anirudha

相關問題