2014-12-04 94 views
0

我正在尝试创建一个javascript正则表达式来替换单词,但只是整个单词。当单词是别人的子词时,我遇到了问题。例如,假设我想在下面的句子中用“狗”代替“熊”。Javascript正则表达式匹配没有周围字符的单词

熊去beartown与其他熊

这将是:

狗去beartown与其他狗

注:1)beartown没有改变,因为它不是整个词 2.)最后一个“熊”确实改变了,即使它后面没有任何字符。

我现在的脚本是:

... 
var term = this.terms[i]; 
var pattern = new RegExp(term.name,'ig'); 
var content = $(this.container).html().replace(pattern,function(match) { 
.... 

目前,它匹配“熊”的所有实例,因此基于Javascript Regex Surrounded by Non-Word Characters, Don't Include Surroundings它不会留下了“beartown”

,我想这个变化:

var pattern = new RegExp('\b' + term.name + '\b','ig'); 

但是,无论我尝试什么样的变化,它现在都不会匹配。诚然,正则表达式(特别是结合w/javascript)不是我的事情。

任何帮助将不胜感激!

感谢, 杰里米

+0

第二个应该是''\\ b'+ term.name +'\\ b''。你需要避开反斜杠。 – soktinpk 2014-12-04 02:32:40

回答

2

两个字符串和正则表达式用反斜杠转义,所以用一个反斜杠在正则表达式中逃脱,你必须先逃避它把它在字符串中

var pattern = new RegExp('\\b' + term.name + '\\b','ig'); 

\\最终将成为\在正则表达式,使您获得\b,而不是退格字符(如\b恰好是退格键的转义序列的字符串)。

+0

这是假定'term.name'没有特殊字符,如'*','?','('等:) :) – 2014-12-04 02:35:42

+2

@Ja͢ck:好点。如何为正则表达式转义字符串:http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript – Guffa 2014-12-04 02:37:17

+0

非常感谢@Guffa,并感谢您的额外解释。 – daprezjer 2014-12-09 06:05:18

0
var pattern = new RegExp('\\b' + term.name + '\\b', 'g'); 

对于其他RegEx的乐趣,请使用:http://www.regexr.com/它可以让您在现场测试RegExs。

+0

只会失败,请注意他说他已经尝试过这个问题的部分。 – Luke 2014-12-04 02:38:55

+0

他用'ig'代替'g'。不过,你是对的,因为我还没有用另一个斜线逃过b前的斜线。我纠正了我的错误。谢谢。 – ateich 2014-12-04 02:52:38

相关问题