#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] )`