我正在尝试在大块文本中进行多次替换,并将单词转换为带有HTML标记的超链接。我发现使用表达式(\b)(word)(\b)
大部分时间都可以找到我想要的单词,但有一个问题是尖括号(<
和>
)显然算作边界,所以当我在同一个字符串上再次运行表达式,我匹配已经转换为链接的单词。我刚刚在表达式([\s-_()])(word)([\s-_()])
中找到了一个解决方法,但这需要我知道允许哪些字符围绕单词而不是禁用字符。那么有没有一种方法可以让一个表达式'将此单词与除<
和>
之外的边界匹配?
注意 - 我不能使用全局标志。这意味着用于在一段文本中进行'n'替换,介于1和所有文本之间。
实施例
var str = "Plain planes are plain. Plain pork is plain. Plain pasta is plainly plain.";
str = str.replace(/(\b)(plain)(\b)/, "$1<a href='www.plain.com'>$2</a>$3");
// this will result in the first instance of 'plain' becoming
// a link to www.plain.com
str = str.replace(/(\b)(plain)(\b)/, "$1<a href='www.plain.com'>$2</a>$3");
// this will NOT make the second instance of 'plain' into
// a link to www.plain.com
// instead, the 'plain' in the middle of the anchor tag
// is matched and replaced causing nested anchor tags
答案 0 :(得分:0)
你可以尝试负面的背后隐藏:
(?<!<a href='www\.)(\b)(plain)(\b)