2015-04-23 85 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>