2017-07-02 54 views
0

我試圖創建CodeMirror的模式覆蓋。CodeMirror模式:線的匹配子集的正則表達式

我有一大堆的匹配線(從流)的部分是測試正則表達式的,我想,如果我可以用這些來匹配,並且該行的記號化的一部分。

例如:

# h1 

變爲:

<span class="..."><span class="cm-overlay cm-markup">#</span> h1</span> 

除了simplemode插件,我不能夠找到模式使用正則表達式的任何實例。這個問題與我正在做的非常相似,但是沒有關於如何僅爲流線子集返回令牌的答案:CodeMirror - Using RegEx with overlay

我設法創建了以下工作模式,但匹配整條生產線,所以生成HTML,如:<span class="cm-overlay cm-markup"># h1</span>

CodeMirror.defineMode("markdown-extra", function() { 
    return { 
     token: function(stream, state) { 
      markup = stream.match(/^([#]{1,6})[^#]/g); // matches markdown header syntax 
      stream.skipToEnd(); 

      if (markup){ 
       console.log(markup, stream) 
       return "markup" 
      } 

      return null 
     } 
    }; 
}); 

的文檔要我用stream.match「吃」的匹配字符,但並沒有提及如何同時仍然使用正則表達式只是象徵一個小節。

我真的不知道如何繼續。

回答

0

我想通了一些。

我還是不完全理解爲什麼它的工作原理,但下面的代碼正則表達式匹配,但不會出於某種原因自己侷限在捕獲組(數組僅1大小)。

CodeMirror.defineMode("markdown-extra", function() { 
     return { 
      token: function(stream, state) { 

       // ## header matching 
       matchArray = stream.match(/^([#]{1,6}) /g); 
       if (matchArray != null) { 
         var match = matchArray[0]; 
         console.log(matchArray); 
         stream.match(match); 
         return "markup" 
     } 
       while (stream.next() != null && !stream.match(/^([#]{1,6})[^#]/g, false)) {} 
     return null; 

      } 
     }; 
    });