2013-07-02 18 views
1

我在wordpress主題中創建了一個簡單的包裝短代碼REGEX - 當HTML內容有換行符時突破HTML代碼

而且現在用ed.onBeforeSetContented.onPostProcess

簡碼在文本視圖[wrap vars="whatever"]my cool content[/wrap]來回切換到

HTML<div class="wrap">my cool content</div>視覺鑑於

這與此代碼的偉大工程。

_get_wrap : function(co) { 
    return co.content.replace(/\<div(.*?)?\>(?:(.+?)?\<\/div\>)?/g, function(a,b,c) {    
     var arr = b.replace(/['"]/g,'').split(' '); 
     var params = new Object(); 
     for (var i=0;i<arr.length;i++){ 
      var p = arr[i].split('='); 
      params[p[0]] = p[1]; 
     } 
     if (params['class'] == "wrap") 
      return '[wrap'+b+']'+c+'[/wrap]'; 
     return a; 
    }); 
} 

不幸的是,如果在打開和關閉簡碼的內容中returnnew line,失敗

我如何才能讓c內容完好,上面的代碼,當有換行符?

+1

這實在是相當困難採取可能考慮重新格式化你的問題,因此很容易爲你的同齡人閱讀。 – simonmorley

+0

我同意@simonmorley。我相信我在下面正確回答了這個問題,但是你最好把這個問題解決爲一個非常簡單的例子,它演示了這個問題(不是跨換行符匹配)。 –

回答

2

.通配符與換行符不匹配。爲了匹配換行符,你必須使用以下方法:[^]

_get_wrap : function(co) { 
    return co.content.replace(/\<div([^]*?)?\>(?:([^]+?)?\<\/div\>)?/g, function(a,b,c) {    
     var arr = b.replace(/['"]/g,'').split(' '); 
     var params = new Object(); 
     for (var i=0;i<arr.length;i++){ 
      var p = arr[i].split('='); 
      params[p[0]] = p[1]; 
     } 
     if (params['class'] == "wrap") 
      return '[wrap'+b+']'+c+'[/wrap]'; 
     return a; 
    }); 
} 
+0

多數民衆贊成它!你達人。 –