2011-03-13 29 views
2

我試圖刪除使用JavaScript的矩形括號(bbcode樣式),這是爲了刪除不需要的bbcode。 我嘗試這個。使用正則表達式去除phpbb標記javascript

theString .replace(/\[quote[^\/]+\]*\[\/quote\]/, "") 

它的工作原理與此字符串樣本:

theString = "[quote=MyName;225]Test 123[/quote]"; 

將這個樣本中失敗:

theString = "[quote=MyName;225]Test [quote]inside quotes[/quote]123[/quote]"; 

,如果有正則表達式旁邊的任何解決方案沒有問題

+0

您可以檢查替換後的正則表達式是否仍然匹配。在這種情況下,再次使用替換代碼,直到所有事件都被替換。 – pimvdb 2011-03-13 12:30:48

+0

,這將無法正常工作,因爲第一次替換隻會匹配像這樣:** [quote = MyName; 225]測試[quote]裏面的引號[/ quote] ** 123 [/ quote]「之後,正則表達式不匹配 – Chris 2011-03-13 12:36:16

+0

你是對的 - 一個實際上需要從內部引號到外部引號。 – pimvdb 2011-03-13 12:37:52

回答

0

這個答案有缺陷,請參閱Ridgerunner的更正確答案。

這是我的破解。

function filterQuotes(text) 
{ 
    return text.replace(/\[(\/)?quote([^\/]*)?\]/g,""); 
} 
+0

好的謝謝,它的工作完全像我想要的 – lutpiero 2011-03-13 13:03:28

+0

很高興聽到它,歡迎來到社區。不要忘記接受/推廣答案。 – 2011-03-13 13:06:00

+0

這個正則表達式:'/ \ [(\ /)?quote([^ \ /] *)?\]/g'不起作用。如果QUOTE中有其他標籤,情況就會變差。例如'[quote]你好[我]有[\ i]世界![/ quote]' – ridgerunner 2011-03-13 18:53:03

1

試試這個:

/\[quote[^\/]+\].*\[\/quote\]$/ 

$符號表示只應使用字符串末尾的結束引號元素來確定您嘗試刪除的引號的結尾。

我添加了一個「。」在星號之前,這樣就可以匹配兩者之間的任何符號。我用你的兩個字符串測試了它,它工作。

編輯:我不完全知道你是如何使用它。但只是一個補充。如果你想在模式也匹配到沒有屬性被添加的字符串,例如:

[quote]Hello[/quote] 

你應該改變「+」號變成一個星號,以及這樣的:

/\[quote[^\/]*\].*\[\/quote\]$/ 
+0

是的,它工作,但它不工作,如果有另一個字符串[/ quote] – lutpiero 2011-03-13 12:53:15

+0

這個正則表達式: '/ \ [quote [^ \ /] * \]。* \ [\/quote \] $ /'不起作用,當兩個QUOTE串聯時,'[quote] Hello1 [/ quote]這也被刪除了! [quote] Hello2 [/ quote]' – ridgerunner 2011-03-13 19:24:40

+0

是的,這是主意。整個評論塊應該被刪除,我認爲... – Chris 2011-03-13 20:29:09

2

其他2個解決方案根本不起作用(請參閱我的意見)。爲了解決這個問題,你首先需要製作一個匹配最內層匹配的引用元素(既不包含[QUOTE..]也不包含[/QUOTE])的正則表達式。接下來,您需要迭代,一遍又一遍地應用這個正則表達式,直到沒有更多的QUOTE元素離開。這個測試的功能你想要做什麼:

function filterQuotes(text) 
{ // Regex matches inner [QUOTE]non-quote-stuff[/quote] tag. 
    var re = /\[quote[^\[]+(?:(?!\[\/?quote\b)\[[^\[]*)*\[\/quote\]/ig; 
    while (text.search(re) !== -1) 
    { // Need to iterate removing QUOTEs from inside out. 
     text = text.replace(re, ""); 
    } 
    return text; 
} 

注意,這個表達式採用傑弗裏·弗裏德爾的「解開循環」效率技術,不僅準確,而且是相當快的啓動。

請參閱:Mastering Regular Expressions (3rd Edition)(強烈推薦)。

+0

+1非常好的ridgerunner,沒想到那種可能性。 – 2011-03-13 22:14:40