#javascript #regex #regular-language
Вопрос:
Здравствуйте, я пытаюсь создать регулярное выражение, которое будет захватывать все между фигурными скобками и включая их, только если строка между фигурными скобками начинается с # и если после закрывающей фигурной скобки есть n }
У меня есть следующая строка в качестве примера —
## Markdown Syntax {#markdown-syntax}nn (lorem ipsum test).nn## Headers {#headers}nn function HelloCodeTitle(props) {return <h1>Hello, {props.name}</h1>; } {2}
В этом примере я хочу извлечь {#markdown-syntax}
и {#headers}
из приведенной выше строки и заменить их пустым пространством ''
Я написал это регулярное выражение, но это тоже захватывает {return <h1>Hello, {props.name}
, и {2}
я этого не хочу. Я только хочу захватить {#markdown-syntax}
и {#headers}
(включая фигурные скобки), так как строка между фигурными скобками начинается с#, а после закрывающей фигурной скобки стоит n }
Комментарии:
1.
n
является ли символ новой строки символом илиза ним следует
n
?2. Это фактическое «n» в строке
Ответ №1:
Используйте match()
с соответствующим рисунком:
var input = "## Markdown Syntax {#markdown-syntax}nn (lorem ipsum test).nn## Headers {#headers}nn function HelloCodeTitle(props) {return <h1>Hello, {props.name}</h1>; } {2}";
var tags = input.match(/{#.*?}(?=n)/g, input);
console.log(tags);
Шаблон регулярного выражения, используемый выше, гласит::
{ match opening {
# match #
.*? match all content up the first
} closing }
(?=n) assert that what follows is a newline character
Если вы хотите удалить эти теги, используйте replace
их с тем же шаблоном:
var input = "## Markdown Syntax {#markdown-syntax}nn (lorem ipsum test).nn## Headers {#headers}nn function HelloCodeTitle(props) {return <h1>Hello, {props.name}</h1>; } {2}";
var output = input.replace(/s*{#.*?}(?=n)/g, " ").trim();
console.log(output);
Комментарии:
1. Забыл упомянуть, что я ищу замену «{#markdown-синтаксис}», «{#заголовки}» пустым местом в строке. Возможно ли это ?
2. Эй, только один короткий вопрос. Можно ли захватить только последний? Например, если я хочу просто захватить
{#headers}
единственный. То есть последний после того, как вы найдете совпадение?3. Используйте этот шаблон:
s*{#.*?}(?=n)(?!.*{#.*}n)
… добавьте отрицательный внешний вид, чтобы убедиться, что это последнее совпадение.4. спасибо, но тянется снова, так как у меня есть это выражение , и я ищу, чтобы получить последнее вхождение заданного состояния(. я.е я ищу, чтобы захватить
{#headers}
простыми словами, регулярное выражение, которое будет захватывать последнего вхождения все, что находится между и включая фигурные скобки, только если строка в фигурных скобках начинается с # и если есть N после закрытия фигурной скобки }