2014-12-04 144 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

相關問題