我需要在下划线之间的单词周围加上斜体标签,就像我们在此处对堆栈溢出格式选项所做的那样。
我可以使用此正则表达式/_(.*?)_/gi轻松地做到这一点。但事实是,我不想将这些标签放在电子邮件地址,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, "• $1");
return modifiedText;
这是我正在处理的代码。这里的问题是,粗体,斜体和项目符号也应用于网址和电子邮件,我需要跳过这两件事。
答案 0 :(得分:0)
答案 1 :(得分:0)
只需检查是否有空格或字符串的开头或结尾:
let italicExp = /(^|\s)_(.*?)_(\s|$)/gi;
let modifiedText = text.replace(italicExp, "$1<i>$2</i>$3")