jQuery:用@符号替换每个字符串?

时间:2017-04-10 15:54:15

标签: javascript regex replace

我正在尝试使用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, "");

有人可以告诉我这是否可能?

2 个答案:

答案 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);