2015-11-03 56 views
2

這是我的代碼給予起點和終點的更換從串詞只替換第一個匹配

var str = 'test test';    
var start = 5;    
var end = 9;     
var val = 'success';     
var ta1 = $("#textbox").val();   
$("#textbox").val(ta1.replace(ta1.substr(start,end),val));    

它的輸出是= success test

但我想給起點和終點,以取代第二測試字符串中的字。我該怎麼做 ?

或許有一些替代更換?

+2

你的意思是你想用複式更換?使用帶'g'修飾符的'RegExp'。 '$(「#textbox」)。val(ta1.replace(RegExp(ta1.substr(start,end),「g」),val));'你是否需要替換所有的'test's?請參閱http://jsfiddle.net/xmfs4t0d/1/ –

+0

是否像var str ='test test'; str.replace(/(測試)/克,「sucess」) – Dhaval

+0

我首先要給起點和終點 –

回答

0

您可以檢查一個回調函數中的偏移量:

var start = 9;    
 
var end = 16;     
 
var val = 'success';     
 
var ta1 = $("#textbox").val(); 
 
rx = RegExp(ta1.substr(start,end - start), "g"); // RegExp is formed with global flag to test all matches 
 
console.log(rx); 
 
$("#textbox").val(ta1.replace(rx, function(m, offset, input) { 
 
    var result = offset === start ? val : m; // Here, we check if the offset is our start position 
 
    return result; 
 
}));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea id="textbox" rows="20">this 
 
is 
 
testing 
 
test</textarea>

所以,基本上,你需要:

  • 讓您的替換字符串用substr功能
  • 使用構造函數創建全局RegExp對象
  • 裏面一個替代,定義回調函數來檢查起始偏移,和如果偏移等於開始變量值,執行更換。
+0

它不起作用,如果我選擇範圍內的文本它複製該文本和其他一些文本在字符串的末尾。請勿替換確切的文字。 –

+0

它不適用於多行的textarea。請在這個textarea中添加break k行。 測試 測試 –

+0

哪裏是換行符? 「開始」和「結束」是什麼樣子?請在http://jsfiddle.net/上提供一個小提琴。或者將其添加到問題本身。 –