用加号替换单词

时间:2015-04-23 07:17:41

标签: javascript regex

当我尝试从输入中删除某个单词时,它会在输入中第一次删除特定单词时删除(如果该单词是另一个单词的一部分)

但我想要做的只是删除我写的单词,如果它是完整的单词,而不是它是另一个单词的一部分。

这是我的代码:

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,但这似乎删除了该单词的每次出现。 但是,如果我想删除没有+ - 符号的单词,则上述代码可以正常工作。 我知道在使用+和其他标志时,你应该逃避它,但我也试过没有运气。

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

这里正在取代&#34; c ++&#34;的第一部分。就像在第一个例子中一样。

Live Fiddle

有谁知道我如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

我认为这会奏效;

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

如果后跟空格或字符串末尾,则会捕获加号字符。

小提琴here

答案 1 :(得分:1)

这允许您从输入中构造RegExp,并替换空格之间或字符串开头或结尾处的匹配。

&#13;
&#13;
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, ' '));
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input></input>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

尝试

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

注意最后的/g - 这意味着要替换所有出现的事件。

编辑:正如keune的回答中所提到的那样,你应该检查c+后跟一个空格(\s),或者它是一个字符串的结尾($)< / p>