2016-01-12 2 views
0

Мне нужно, чтобы соответствовать строки, как это: ''foo'', но не тогда, когда внутри вики ссылки как: [[GNU Lesser General Public License|GNU ''Lesser'' General Public License]]Как соответствовать курсивный маркеры вики, но не внутри вики ссылки

Моя попытка это, но он не работает:

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

Не использовать регулярные выражения. Это недостаточно регулярно. Я бы предложил что-то вроде http://pegjs.org/, которое может быть довольно легким для начала. – ssube

+0

Используйте ['\ [\ [. *? \] \] | '' (. *?) '''] (Https://regex101.com/r/wG3jA5/1) и извлеките захваченную группу # 1 – anubhava

ответ

0

может быть, вы можете попробовать с

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

Если вы не хотите спичек в двойных кавычках строки с кронштейнами внутри него, вы можете использовать:?!

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

, но будьте осторожны: Can терпит неудачу с вложенными скобками, например:

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

и близких скобок без открытых них, как:

asdkjakldha ''akjdhkajdhksd'' ajsdlasjdlasd ]]

Javascript не поддерживает назад '; lookbehind может улучшить регулярное выражение.

Посмотрите на это: http://regexr.com/3cigm

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 
    } 
}) 
Смежные вопросы