#javascript #regex
#javascript #регулярное выражение
Вопрос:
Я понимаю, что это тривиальный вопрос регулярного выражения. Но, возможно, это было бы полезно не только для меня.
У меня есть файл markdown, и мне нужно обновить его ссылки. Ссылка Markdown имеет формат [TITLE](HREF)
. У меня есть шаблон, /[*](.*?)/
но он возвращает неверный результат ](HREF)
.
const line = 'Markdown text [link title](/link/href/name.md#anchor)'
const res = line.match(/[*](.*?)/gm);
console.log(res);
Итак, как получить просто HREF
(в примере это было бы /link/href/name.md#anchor
)
Комментарии:
1. Вы можете использовать
/[[^][]*]([^()]*)/g
2. Что вы ожидаете, что это вернет?!
3. Спасибо, но
/[[^][]*]([^()]*)/
возвращает все[link title](/link/href/name.md#anchor)
. но мне нужно только/link/href/name.md#anchor
4. Захватите эту часть —
/[[^][]*](([^()]*))/g
и получите значение группы 1.5. Я не совсем уверен, что вы имеете в виду, говоря «обновить его ссылки», но лучшим подходом может быть использование реального анализатора / процессора markdown, такого как remark: remark.js.org . Это также может иметь дело с такими случаями, как экранирование
[ ]
в тексте заголовка.
Ответ №1:
Вы можете использовать
const line = 'Markdown text [link title](/link/href/name.md#anchor)'
const reg = /[[^][]*](([^()]*))/g;
let m, res = [];
while (m = reg.exec(line)) {
res.push(m[1]);
}
console.log(res);
/[[^][]*](([^()]*))/g
Регулярное выражение соответствует:
[
—[
символ[^][]*
— 0 или более символов, отличных от[
и]
]
—]
символ(
—(
символ([^()]*)
— Группа 1: любые символы 0 , отличные от(
и)
)
—)
символ.
С последними реализациями ECMAScript вы можете использовать
const line = 'Markdown text [link title](/link/href/name.md#anchor)'
console.log(line.match( /(?<=[[^][]*]()[^()]*(?=))/g ));
Ответ №2:
Вы могли бы использовать этот шаблон: ([^)] )$
(
— совпадение (
буквально
[^)]
сопоставьте один или несколько символов, отличных от )
)
— совпадение )
буквально
$
— сопоставить конец строки
Комментарии:
1. Это не то, что мне нужно, потому что можно поймать только текст в скобках, а не ссылку md
2. @FranzJsel Это соответствует ссылке 🙂 Если это всегда в конце, оно не будет соответствовать никакому другому тексту в скобках — смотрите демонстрацию 🙂