2014-10-01 145 views
0

我允許用戶輸入轉換爲MathJax的BBCodes;但是,有一個問題,如下所示。JavaScript ReGeX:替換兩個字符串之間的匹配字符串

function chatFormat(text){ 
    text = text.replace('\\', ''); 
    text = text.replace(/\[f\](.+?)\/(.+?)\[\/f\]/igm, '\\(\\frac{\\text{$1}}{\\text{$2}} \\)'); 
    text = text.replace(/\[eq\](.+?)\[\/eq\]/igm, '\\($1 \\)'); 
    text = text.replace(/(.+?)\^(.+?)/igm, '\\($1^{\\text{$2}} \\)'); 
    text = text.replace(/\[sqrt\](.+?)\[\/sqrt\]/igm, '\\(\\sqrt{\\text{$1}} \\)'); 

    return text; 
} 

工作得很好。它將BBCode完美轉換爲適當的命令;但是,如果您開始嵌套命令,則存在問題。例如:

如果用戶類型:

[eq]15^2 = [sqrt]225[/sqrt][/eq]

將轉換爲:

\(15^{2} = \(\sqrt{225} \) \)

  ^  ^
      |   | 
      |   | 
      |   | 
       HOW TO AVOID 

我怎樣才能避免額外\(\)當他們嵌套BBCodes,就像[eq] bbcode中的平方根命令一樣?

謝謝!

回答

1

這對於正則表達式可能會非常困難,因爲您不能使用它們來匹配任意嵌套的模式(請參閱,例如Can regular expressions be used to match nested patterns?)。如果你確實需要這種複雜的嵌套解析,那麼你最好寫一個真正的解析器......或者更好,因爲BBCode很常見,使用一個已經存在的解析器。這裏有一個看起來相當可擴展的,可能適合您的需求:https://github.com/patorjk/Extendible-BBCode-Parser

+0

對不起,您覺得哪個鏈接需要在答案中更好地解釋?第一點是關於這個普遍問題的一個高度優先的stackoverflow主題(爲什麼正則表達式不適合解析嵌套表達式),而第二個鏈接指向一個可以解決這個特定問題的庫。 – caseygrun 2014-10-01 05:02:44

相關問題