2011-09-17 80 views
1

我正在嘗試更新textarea中的子字符串。基本上,它的Twitter這樣的@username功能。用戶將輸入@user,我必須用用戶選擇的用戶名替換「@user ..」。查找並替換具有當前焦點的子字符串

字符串:

你好這是[email protected]和@gma

在上述字符串中,重點是在串i中的端部,@gma後。 我想用我選擇的子字符串替換@gma。不知何故,我無法做到這一點。 當我使用

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

[email protected]的@gma被替換。我如何更改最近鍵入的@gma?

我可以得到插入位置,但無法替換所需的子字符串。

任何幫助,將不勝感激。

+0

你有沒有考慮相反的做法?尋找以@開始的文本中的所有單詞,然後匹配散列表中的字符串以獲得替換?在我看來,這既能解決你的問題,又能提高效率,因爲你只需移動文本一次,添加更多的替換文本就很容易。 – natedavisolds

回答

1

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

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

的重要部分是$標誌,這意味着僅在字符串的末尾以搜索​​。如果你想在最後@符號後更換任何字母數字字符串:

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

編輯後,似乎與我的巧合有點相似。 – Alex

+0

我重讀了這個問題,並意識到@gma並不是他需要捕獲的唯一字符串。在Regex中只有很多方法來表示字母數字字符範圍。 :P – Jake

1

如果您知道用戶名總是會在字符串的結尾,你可以使用字符串匹配$的正則表達式結束:

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

Twitter用戶名允許包含字母,數字和下劃線。