如何匹配斜体wiki标记,但不在wiki链接内

时间:2016-01-12 19:45:37

标签: javascript regex mediawiki

我需要匹配这样的字符串:''foo''但不在内部wiki链接时匹配:[[GNU Lesser General Public License|GNU ''Lesser'' General Public License]]

我的尝试是这样但它不起作用:

/''([^']*(?:'[^']+)*(?![^\]]+\]\]))''/g

2 个答案:

答案 0 :(得分:0)

也许,你可以试试

  

''(*?)''((:?![^ \ [] *] {2}))

如果你不想匹配双引号字符串 在其中使用括号,您可以使用:

  

''(?[^ \ [\]] *)''((:?![^ \ [] *] {2}))

但请注意:嵌套括号可能会失败,例如:

[[ ''foo'' aksjdhkajd [[ asdasdasd ]] ]]

和没有打开的括号,如:

asdkjakldha ''akjdhkajdhksd'' ajsdlasjdlasd ]]

Javascript不支持 lookbehind ; lookbehind 可以增强正则表达式。

看看这个:http://regexr.com/3cigm

答案 1 :(得分:0)

我决定使用此代码在链接中处理斜体文本:

text = text.replace(/\[\[([^\]]+)\]\]/g, function(_, gr) {
    gr = gr.split('|');
    if (gr.length == 1) {
        // normal wiki link
    } else {
        // wikilink with name and caption
        gr[1] = gr[1].replace(/''([^']+)''/gm, function(_, g) {
            // g is italic text
        });
        // gr[1] can contain italic text gr[0] is a link
    }
})