查找并替换具有当前焦点的子字符串

时间:2011-09-17 14:06:26

标签: javascript regex

我正在尝试更新textarea中的子字符串。基本上,它的推特就像@username一样。用户将输入@user,我必须用用户选择的用户名替换“@user ..”。

字符串:

  

您好,这是test@gmail.com和@gma

在上面的字符串中,焦点位于字符串i的末尾,在@gma之后。 我想用我选择的子串替换@gma。不知何故,我无法做到。 当我使用

this.value = this.value.replace("@gma"+"", "ReplaceText") + ' ';

替换了test@gmail.com的@gma。如何更改最近输入的@gma?

我可以获得插入位置,但无法替换所需的子字符串。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

您需要使用RegEx而不是普通字符串进行替换。

this.value = this.value.replace(new RegExp("@gma$","g"), "ReplaceText") + ' ';

重要的部分是$符号,这意味着只在字符串的末尾搜索@gma。如果要在最后@个符号后替换任何字母数字字符串:

this.value = this.value.replace(
    new RegExp("@[A-Za-z0-9]+$","g"), 
    "ReplaceText") 
+ ' ';

答案 1 :(得分:1)

如果您知道用户名始终位于字符串的末尾,则可以使用字符串匹配$的正则表达式结尾:

value = "Hello this is test@gmail.com and @gma";
var re = new RegExp("@[a-zA-Z_0-9]+$");
value = value.replace(re, 'Replace Text');
console.log(value);
// => "Hello this is test@gmail.com and Replace Text"

允许Twitter用户名包含字母,数字和下划线。