我正在尝试在一大段文本中进行多次替换,并将单词转换为带有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

最佳答案

您可以尝试使用以下否定式:

(?<!<a href='www\.)(\b)(plain)(\b)

09-19 23:04