Обновите hrefs в ссылках на уценку - PullRequest
3 голосов
/ 19 марта 2019

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

У меня есть файл уценки, и мне нужно обновить его ссылки.Ссылка на уценку имеет формат [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)

Ответы [ 2 ]

2 голосов
/ 19 марта 2019

Вы можете использовать

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 соответствует:

  • \[ - [ char
  • [^\][]* -0 или более символов, отличных от [ и ]
  • \] - ] символ
  • \( - ( символ
  • ([^()]*) - Группа 1: любые 0+ символов, кроме ( и )
  • \) - ) char.

С последними реализациями ECMAScript выможет использовать

const line = 'Markdown text [link title](/link/href/name.md#anchor)'
console.log(line.match( /(?<=\[[^\][]*\]\()[^()]*(?=\))/g ));
0 голосов
/ 19 марта 2019

Вы можете использовать этот шаблон: \([^\)]+\)$

\( - соответствует ( буквально

[^\)]+ соответствует одному или нескольким символам, отличным от )

\) - соответствует ) буквально

$ - совпадение конца строки

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...