Tinymce编辑器插件Regexp问题?

时间:2011-09-08 01:52:57

标签: regex wordpress tinymce gallery

我使用tinymce编辑器将内容插入mysql。 我根据我的系统更改了wordpress gallery编辑器插件。

如果内容中有图库代码。我将此代码转换为符号照片,以便用户了解有一个图库,而不是查看代码。像wordpress一样。

如果内容中只有1个图库,我会将此代码成功转换为图片,但如果有超过1个图库则会失败。

如何在保存到数据库之前将所有{gallery}代码转换为符号图像,并在插入或更新到mysql时将这些照片再次转换回{gallery}代码。

我在正则表达方面非常糟糕。 我认为do_gallery RegExp有错误。我该怎么改变呢。

initalising编辑如:

ed.onBeforeSetContent.add(function(ed, o) {
            ed.dom.loadCSS(url + "/css/gallery.css");
            o.content = t._do_gallery(o.content);
        });

        ed.onPostProcess.add(function(ed, o) {
            if (o.get)
                o.content = t._get_gallery(o.content);
        });

我的“做并获得图库”代码如下:

_do_gallery : function(co) {
        return co.replace(/\{gallery([^\]]*)\}/g, function(a,b){
            var image = '<img src="gallery.gif" class="wpGallery mceItem" title="gallery'+tinymce.DOM.encode(b)+'" />';
            console.log(image);
            return image;

        });
    },

    _get_gallery : function(co) {

        function getAttr(s, n) {
            n = new RegExp(n + '="([^"]+)"', 'g').exec(s);
            return n ? tinymce.DOM.decode(n[1]) : '';
        };

        return co.replace(/(?:<p{^>}*>)*(<img[^>]+>)(?:<\/p>)*/g, function(a,im) {
            var cls = getAttr(im, 'class');

            if ( cls.indexOf('wpGallery') != -1 )
                return '<p>{'+tinymce.trim(getAttr(im, 'title'))+'}</p>';

            return a;
        });
    }

如果内容是:

<p>Blah</p>
<p>{gallery Name="gallery1" id="82" galeryID="15"  sizeId="6" galery_type="list"}</p>
<p>test</p>

这没关系

<img src="gallery.gif" class="wpGallery mceItem" title="gallery Name=&quot;tekne1&quot; id=&quot;82&quot; galeryID=&quot;15&quot; sizeId=&quot;6&quot; galery_type=&quot;liste&quot;" />

但是,如果内容是:

<p>Blah</p>
<p>{gallery Name="gallery1" id="82" galeryID="15"  sizeId="6" galery_type="list"}</p>
<p>test</p>
<p>{gallery Name="gallery2" id="88" galeryID="11"  sizeId="1" galery_type="slide"}</p>
<p>test2</p>

记录

<img src="gallery.gif" class="wpGallery mceItem" title="gallery Name=&quot;gallery1&quot; id=&quot;82&quot; galeryID=&quot;15&quot; sizeId=&quot;6&quot; galery_type=&quot;list&quot;}&lt;/p&gt; &lt;p&gt;test&lt;/p&gt; &lt;p&gt;{gallery Name=&quot;gallery2&quot; id=&quot;88&quot; galeryID=&quot;11&quot; sizeId=&quot;1&quot; galery_type=&quot;slide&quot;" />

我希望我能解释一下我的问题 谢谢。

1 个答案:

答案 0 :(得分:1)

我怀疑你的原始正则表达式是一个拼写错误,当你点击] 时看起来像是缺少 Shift 。试试这个:

/\{gallery([^\}]*)\}/g

然后([^\}]*)部分会(贪婪地)吃掉任何不是}的字符序列;你原来的那个会消耗任何不包含]的字符序列,结果是你抓住了第一个{和最后一个}之间的所有内容,而不仅仅是抓住大括号之间的文字。