匹配除尖括号以外的字边界

时间:2012-12-07 18:17:46

标签: javascript html xml regex frontend

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

1 个答案:

答案 0 :(得分:0)

你可以尝试负面的背后隐藏:

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