Javascript &引用;简单的;文本替换功能

Javascript &引用;简单的;文本替换功能,javascript,jquery,regex,string,replace,Javascript,Jquery,Regex,String,Replace,我有一个字符串,它基本上是由逗号分隔的“单词”列表。这些“词”几乎可以是任何角色,例如“巴特·辛普森,前女友,老兄,激进派” 我正在尝试使用javascript、jQuery,尽我所能将基于搜索字符串的单词替换为零(本质上,从列表中删除该单词) 例如,函数的定义如下:functionremoveword(myString,wordToReplace){…} 因此,将上面列出的字符串作为myString传递,将“dude”作为wordToReplace传递,将返回字符串“Bart Simpson,

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

我正在尝试使用javascript、jQuery,尽我所能将基于搜索字符串的单词替换为零(本质上,从列表中删除该单词)

例如,函数的定义如下:
functionremoveword(myString,wordToReplace){…}

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


下面是我正在修补的一行代码…请帮助我找出它的错误或其他(更好的)解决方案:
$myString.val($myString.val().replace(/wordToReplace\,/,)

以您现在的方式使用正则表达式并不是真正必要的。相反,我会将字符串拆分为标记,并删除与搜索词匹配的标记,如果有:

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*/);  // 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)
 {
    return myString.replace(wordToReplace+", ", "");
 };

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

不是为健壮性而构建的,但这是您想要的

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"

如果仍要使用正则表达式,可以尝试以下方法:

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
}

不过,如果您想操作列表,将字符串拆分为数组更直观,效果更好。

如果您仍然想使用正则表达式,可以尝试以下方法:

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
}
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');
不过,如果您想操作列表,将字符串拆分为数组更直观、更好

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"
我应该带上那样的东西

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

如果要替换的单词是列表中的最后一个元素,则失败。这有两个问题:第一,它与列表中的最后一项不匹配,因为它后面没有逗号;其次,它将匹配一个子字符串(例如,如果列表包含'bye',要替换的单词是'bye',它将在再见中抓住bye)。我同意。丹尼尔的解决方案更好。然而,询问者想知道他们的代码出了什么问题,这是让他们的代码正常工作的最简单的方法(免责声明它还不够健壮)。如果要替换的单词是列表中的最后一个元素,则会失败。这有两个问题:第一,它与列表中的最后一项不匹配,因为它后面没有逗号;其次,它将匹配一个子字符串(例如,如果列表包含'bye',要替换的单词是'bye',它将在再见中抓住bye)。我同意。丹尼尔的解决方案更好。然而,询问者想知道他们的代码出了什么问题,这是让他们的代码正常工作的最简单的方法(声明代码还不够健壮)。当我运行这段代码时,我在调用indexOf时遇到了一个“Object不支持此属性或方法”错误。当我发出警报(令牌)时,它返回删除空格的字符串。就像split没有返回数组一样?我可以指定类型以强制它返回一个吗?以某种方式转换它?
String.split
是一个内置的Javascript函数,返回一个数组。有没有可能您在某个地方重写了
String.prototype.split
?好吧,jQuery包含在这个项目中,所以可能它使用了jQuery拆分?您使用的是什么版本的jQuery?我用1.3.2试过了,效果很好。据我所知,jQuery没有定义自己的String.split。
alert(String.split)
的输出是否包含
[本机代码]
(在firefox中)或函数定义?我在firefox中进行了检查,是的,它确实返回[本机代码],但是,这在IE7中被放大了。IE7在indexOf方面有问题吗?当我运行这段代码时,在调用indexOf时会出现“Object不支持此属性或方法”错误。当我发出警报(令牌)时,它返回删除空格的字符串。就像split没有返回数组一样?我可以指定类型以强制它返回一个吗?以某种方式转换它?
String.split
是一个内置的Javascript函数,返回一个数组。有没有可能您在某个地方重写了
String.prototype.split
?好吧,jQuery包含在这个项目中,所以可能它使用了jQuery拆分?您使用的是什么版本的jQuery?我用1.3.2试过了,效果很好。据我所知,jQuery没有定义自己的String.split。
alert(String.split)
的输出是否包含
[本机代码]
(在firefox中)或函数定义?我在firefox中进行了检查,是的,它确实返回[本机代码],但是,这在IE7中被放大了。IE7在indexOf方面有问题吗?我在IE7中遇到了这个解决方案的问题。由于某些原因,使用jQuery trim函数将无法消除所有尾随空格!所以这个函数永远不会匹配传入的单词,因为后面的空格…在Firefox tho中工作得很好。我在IE7中遇到了这个解决方案的问题。由于某些原因,使用jQuery trim函数将无法消除所有尾随空格!所以这个函数永远不会匹配传入的单词,因为后面的空格…在Firefox tho中工作得很好。