REGEX - 当内容包含换行符时,HTML到短代码破解

时间:2013-07-02 18:12:35

标签: javascript regex wordpress tinymce shortcode

我在wordpress主题中创建了一个简单的包装短代码

我正在使用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 个答案:

答案 0 :(得分: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;
    });
}