我有一个字符串,它基本上是由逗号分隔的“单词”列表。这些“单词”几乎可以是任何字符,例如“巴特辛普森,前女友,老兄,激进”
我正在尝试使用javascript,jQuery,无论我可以根据没有任何内容的搜索字符串替换单词(实质上是从列表中删除单词)。
例如,函数定义如下:function removeWord(myString, wordToReplace) {...};
因此,将上面列出的字符串作为myString传递并将“dude”作为wordToReplace传递将返回字符串“Bart Simpson,前女友,激进”
以下是我正在修补的代码行...请帮我弄清楚它有什么问题或其他(更好)解决方案:
$myString.val($myString.val().replace(/wordToReplace\, /, ""));
答案 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"