我正在尝试使用jquery删除附加了@符号的每个字符串。
对于EXAMPLE,字符串如下所示:
Hello STO, This is a test string @text and I need all the strings with @strings to be replaced.
因此,在上面的示例中,我需要替换@text
和@strings
。
带@符号的字符串是动态的,所以我不能像这样做简单的字符串替换:
Mystring.replace(/@text/g, "");
有人可以告诉我这是否可能?
答案 0 :(得分:4)
编辑:您添加了一条更改内容的评论。我将在原始答案下方的行之后选择替换方案。
原始答案:
您使用正则表达式走在正确的轨道上,您只需要说出应该删除的@
之后的内容。例如,如果它只是英文字母字符:
str = str.replace(/@[A-Z]+/gi, "");
var str = "Hello STO, This is a test string @text and I need all the strings with @strings to be replaced.";
str = str.replace(/@[A-Z]+/gi, "");
console.log(str);
如果您想要包含数字或其他字符,请相应调整[A-Z]
。
如果要删除后面的空格(如果有),请将\s*
添加到正则表达式中:
str = str.replace(/@[A-Z]+\s*/gi, "");
var str = "Hello STO, This is a test string @text and I need all the strings with @strings to be replaced.";
str = str.replace(/@[A-Z]+\s*/gi, "");
console.log(str);
Sterling Archer提出了一个有趣的问题:
有没有办法读取空间的下一个实例而不是检查特定的字符?
基本上,我们不会列出可能跟随@
的字符,而是列出将终止@
之后的字符的字符(如空格,逗号等)。我们用一个否定的角色类来做到这一点:
str = str.replace(/@[^\s\t,.:?]+/gi, "");
var str = "Hello STO, This is a test string @text and I need all the strings with @strings to be replaced.";
str = str.replace(/@[^\s\t,.:?]+/gi, "");
console.log(str);
再次修剪以下空白:
var str = "Hello STO, This is a test string @text and I need all the strings with @strings to be replaced.";
str = str.replace(/@[^\s\t,.:?]+\s*/gi, "");
console.log(str);
删除它。但是,在稍后添加的评论中,您已经说过:
不,不要试图删除它。试图替换它
在这种情况下,根据更换的内容,您可以使用函数来确定用以下内容替换令牌的内容:
str = str.replace(/@[A-Z]+/gi, function() {
return /*the replacement*/;
});
该函数接收整体匹配的字符串。如果您希望在没有@
的{{1}}之后获得该字词,则可以使用捕获组。捕获组的值在整体匹配后列出。所以:
@
例如,我们可以找到一个我们查找替换的对象:
str = str.replace(/@([A-Z]+)/gi, function(overallMatch, capture0) {
return /*the replacement*/;
});
答案 1 :(得分:2)
虽然TJ的答案做得很好,但我希望在您希望获得关系替换时为您提供替代方案。对于replacements
对象中的每个键/值对,它会将@key
替换为value
。
var str = "My name is @name. My favorite food is @food.";
var replacements = {
"name" : "John Doe",
"food" : "spaghetti"
};
for (var k in replacements) {
var ph = "@" + k; //store "@key"
var re = new RegExp(ph,"g"); //regex object for @key
str = str.replace(re, replacements[k]); //replace with value
}
console.log(str);