“简单”文本替换功能

时间:2010-03-23 19:17:23

标签: javascript jquery regex string replace

我有一个字符串,它基本上是由逗号分隔的“单词”列表。这些“单词”几乎可以是任何字符,例如“巴特辛普森,前女友,老兄,激进”

我正在尝试使用javascript,jQuery,无论我可以根据没有任何内容的搜索字符串替换单词(实质上是从列表中删除单词)。

例如,函数定义如下:function removeWord(myString, wordToReplace) {...};

因此,将上面列出的字符串作为myString传递并将“dude”作为wordToReplace传递将返回字符串“Bart Simpson,前女友,激进”

以下是我正在修补的代码行...请帮我弄清楚它有什么问题或其他(更好)解决方案:
$myString.val($myString.val().replace(/wordToReplace\, /, ""));

4 个答案:

答案 0 :(得分:4)

使用正则表达式并不是必需的。相反,我会将字符串拆分为标记并删除与搜索字匹配的标记,如果有的话:

function removeWord(myString, wordToReplace)
{
    var tokens = myString.split(/\s*,\s*/);  // allow for whitespace around the comma
    var index = $.inArray(wordToReplace, tokens);  

    if (index != -1)
    {
        tokens.splice(index, 1);
    }

    return tokens.join(", "); // Assumes you want a space after each comma
}

var s = "Bart Simpson, Ex-girlfriend, dude, radical";
removeWord(s, "dude"); // returns "Bart Simpson, Ex-girlfriend, radical

如果您要搜索的字符串可能包含重复项,则可以使用此更改版本的函数(indexOf仅返回第一个索引,因此需要循环才能查找所有它们):

function removeWord(myString, wordToReplace)
{
    var tokens = myString.split(/\s*,\s*/);
    var index;

    while ((index = $.inArray(wordToReplace, tokens)) != -1)
    {
        tokens.splice(index, 1);
    }

    return tokens.join(", ");
}

var s = "Bart Simpson, Ex-girlfriend, dude, radical, dude";
removeWord(s, "dude"); // returns "Bart Simpson, Ex-girlfriend, radical

答案 1 :(得分:1)

不是为了健壮而构建,但这可以满足您的需求。

function removeWord(myString, wordToReplace)
 {
    return myString.replace(wordToReplace+", ", "");
 };

 var s = "Bart Simpson, Ex-girlfriend, dude, radical" ; 
 s = removeWord(s, "dude") ; // "Bart Simpson, Ex-girlfriend, radical"

答案 2 :(得分:0)

如果您仍想使用正则表达式,可以试试这个:

function removeWordFromList(str, word) {
    return str.replace(
        new RegExp("(^|,\\s*)" + escape(word) + "(\\s*,\\s*|$)", "g"),
        "$1") // remove the word
      .replace(/\s*,\s*$/, ""); // remove the trailing comma
}

尽管如此,如果你想操纵列表,将字符串拆分成数组会更直观,更好。

答案 3 :(得分:0)

var text = ",Bart Simpson ,, ,  Ex-girlfriend, 5 dude ,radical, sth,, dolr, ";

function removeWord(source, word)
{
  return source
    // replace multiple delimiters into one
    .replace(/\s*,[\s*,]*/g, ', ')
    // trim delimiters
    .replace(/^,\s*|,\s*$/g, '')
    // replaces the substring
    .replace( new RegExp('(^|,\\s)'+word+'($|,\\s)'), function(match, left, right) {
      left = left.trim(), right = right.trim();
      return (left+right).length !== (left.length || right.length) ? ', ': '';
    });
}

removeWord(text,'5 dude');

应该带来类似的东西

"Bart Simpson, Ex-girlfriend, radical, sth, dolr"