Регулярное выражение, соответствующие обратные ссылки, не вложенные в тройные обратные ссылки

#javascript #regex

Вопрос:

Я пытаюсь сопоставить строки, которые окружены обратными метками, но они не окружены тройными обратными метками.

Например:

совпадение: `Я должен быть сопоставлен`

не должно совпадать: « `Привет, мир` «

Это то, что я пробовал до сих пор: https://regex101.com/r/P4MhiM/1

Комментарии:

1. Очень сложно сделать это с помощью регулярных выражений, особенно если вы начнете принимать во внимание, что может быть несколько блоков с тройным обратным обращением. Вам лучше написать небольшой синтаксический анализатор.

Ответ №1:

Сопоставьте и зафиксируйте часть совпадения, затем используйте пользовательскую логику при замене:

 const text = "n``` `Hello world` ```nnn`Matched!`n";
const rx = /```.*?```|`([^`n] )`/g;
console.log(
  text.replace(rx, (x, y) => y ? `<code>${y}</code>` : x)
) 

Смотрите демонстрацию регулярных выражений. Подробные сведения:

  • ```.*?``` — строки между тройными обратными метками (без разрывов строк между обратными метками)
  • | — или
  • `([^`n] )` — строки между обратными метками без символов разрыва строки.

Ответ №2:

я получаю пройти этот тестовый пример

сначала зафиксируйте все совпадения в одинарных кавычках

 `(?:. )`
 

вовторых фильтруйте совпадения только по символу а не по обратным меткам или пробелам

 `(?:[^`||s] )`
 

https://regex101.com/r/oVE7zi/1