Выражение регулярного выражения, которое соответствует определенному шаблону, но не соответствует другому шаблону - PullRequest
0 голосов
/ 10 июля 2019

Мне нужно поместить курсив вокруг слов, которые заключены между подчеркиванием, как мы делаем здесь для опций формата переполнения стека.

Я легко могу сделать это с помощью этого регулярного выражения /_(.*?)_ / г.Но дело в том, что я не хочу помещать эти теги между адресами электронной почты, URL-адресами и т. Д. Поэтому мне нужно регулярное выражение, которое соответствует курсиву, но не соответствует URL-адресу или шаблону электронной почты.

let urlExp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi;
let boldExp = /\*(.*?)\*/gi;
let italicExp = /\_(.*?)\_/gi;
let bulletedExp = /^\-\s(.*)/gm;
let emailExp = /([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6})/gi;
let modifiedText = text
    .replace(urlExp, "<a href='$1' target='_blank'>$1</a>")
    .replace(emailExp, '<a href="mailto:$1">$1</a>')
    .replace(boldExp, "<strong>$1</strong>")
    .replace(italicExp, "<i>$1</i>")
    .replace(bulletedExp, "&#8226; $1");
return modifiedText;

Вот код, над которым я работаю.Проблема здесь в том, что жирный, курсив и маркеры также применяются к URL-адресам и электронным письмам, мне нужно пропустить эти две вещи.

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Просто проверьте, есть ли пробелы, начало или конец строки:

let italicExp = /(^|\s)_(.*?)_(\s|$)/gi;
let modifiedText = text.replace(italicExp, "$1<i>$2</i>$3")
0 голосов
/ 10 июля 2019

Вы можете использовать границы слов (\b), чтобы определить, что мы находимся в конце слова или слов с подчеркиванием, а не в середине.

См. regex101 для примера, используя это регулярное выражение:

\b_(.*?)_\b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...