2015-04-23 120 views
0

當我試圖從輸入中刪除某個單詞時,它會刪除第一次在輸入中出現特定單詞(同樣如果該單詞是另一個單詞的一部分)用加號替換單詞

但是我想要做的是隻刪除我寫的單詞,它是完整的單詞,而不是如果它是另一個單詞的一部分。

這是我的代碼:

HTML:

<input value="c++ c+ c" /> 

的JavaScript:

$input = $('input'); 
$word = "c+"; 

$input.val($input.val().replace($word, "")); 

這樣做的結果應該是:

+ c+ c // Removed the "c+" part of the "c++" word 

..但希望它是:

c++ c // Removed "c+" 

我曾嘗試使用正則表達式/\bc+\b/g但似乎刪除每一個詞的出現。 但是,如果我想刪除一個沒有+ -sign的單詞,上面的代碼工作正常。 我知道使用+和其他標誌時,你應該逃避它,但我也試過沒有運氣。

$input.val($input.val().replace(/\bc\+/, "")); 
// Output: + c+ c // Removed the "c+" part of the "c++" word 

這裏它將取代第一個例子中的第一部分「C++」。

Live Fiddle

任何人誰知道我是如何解決這一問題?

回答

1

我認爲這會工作;

/\bc\+(?=\s|$)/g 

如果它們後面跟着空格或字符串末尾,這將捕獲加字符。

小提琴here

+0

非常感謝。那做了工作! :D 而不是以我的轉義函數中的「\\ b」結尾,我將它改爲「(?= \\ s | $)」。 – TheYaXxE

0

嘗試用

str.replace(/\bc\+(?=\s|$)/g, ""); 

注意/g末 - 這意味着更換所有出現。

編輯:正如keune的答覆中提到,你應該檢查c+是後面有一個空格(\s),或者它是一個字符串的結束($

+1

它還消除了 「C++」 字 – TheYaXxE

+0

阿的第一部分,是的,你說得對。我想我只會指向@ keune的回答 – leopik

1

這使您可以構建從輸入RegExp,並更換是空間之間,或在字符串的開頭或結尾匹配。

RegExp.escape = function(s) { 
 
    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); 
 
}; 
 

 
var value = 'c+ c++ c+ c+c c+ c', 
 
    $word = RegExp.escape('c+'), 
 
    regex = new RegExp('(?:^|\\s+)' + $word + '(?:\\s+|$)', 'g'); 
 

 
$('input').val(value); 
 
$('input').val($('input').val().replace(regex, ' '));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input></input>