2012-09-26 41 views
1

我很抱歉,如果這聽起來很傻,但我是新的JavaScript,和我想要做的是這樣的:如何用JavaScript代替文章中的隨機匹配文字?

比方說,我有一些文章用關鍵字裏面,例如像「培訓 」。文章會是這樣的:

這裏的一些文字培訓和更多bla bla bla。我們可以培訓這... 使用培訓你可以...

現在我想做的是與我們說「乳寧」代替「培訓」是什麼,但我不希望它們全部被替換,我只想替換其中的一個(隨機的)。

我該如何使用JavaScript來做到這一點?

+0

http://stackoverflow.com/a/12604533/1250044 – yckart

回答

0

我寫了一個小的少140byt.es功能這個 「問題」:https://gist.github.com/3728254

HTML

<div id="str">Some text here training and more bla bla bla. We can training this... Using training you can...</div> 

JS

var replaceR = function(a,b,c,d,e){e=new RegExp(b,"ig");a.innerHTML=a.innerHTML.replace(d?b:e,c)}; 

    replaceR(document.getElementById('str'), 'training', 'runing', false); 

DEMO

UPDATE

var string = document.getElementById('str').innerHTML, 
    newString = string.replace('training', 'running'); 

document.getElementById('str').innerHTML = newString; 

http://fiddle.jshell.net/db3yc/

更新2

var s = "Some text here training and more bla bla bla. We can training this... Using training you can...", 
    nth = 0, 
    r = (new Date().getSeconds()) % 4; 
s = s.replace(/training/g, function(match, i, original) { 
    nth++; 
    return (nth === r) ? "running" : match; 
}); 
document.write(s); 

http://fiddle.jshell.net/JfYvA/

+0

這只是取代所有發生。 – pimvdb

+0

好的,我必須接受! – yckart

+0

我已經更新了我的答案! – yckart

0

我不是100%肯定,但經過一些小測試,這應該工作:)

function replaceRandom(str, search, replace) { 
    var split = str.split(new RegExp("\b?" + search + "\b?")), 
     length = split.length - 1, 
     rnd = ~~(Math.random() * length), 
     result; 

    if (length > 0) { 
     result = split.map(function(val, idx) { 
      return val && (val + (idx === rnd ? replace : search)); 
     }) 

     return result.join("").substring(-search.length); 
    } else{ 
     return str; 
    } 
} 

fiddle

+0

即時通訊不知道如何使用這一個:)對不起,但喜歡說,即時通訊新的JS。 – SomeoneWeird

+0

我已經添加了一個示例 – Andreas

+0

它不工作... :( – SomeoneWeird

0

寫道,建立主字符串內的子位置的列表,然後執行一個單一的隨機置換函數:

function replaceRandom(str, needle, replacement) 
{ 
    var indices = [], 
    re = new RegExp(needle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'ig'); 

    // find all string positions where needle occurs 
    while (match = re.exec(str)) { 
     indices.push(match.index); 
    } 

    if (indices.length) { 
     // determine a random match to do replacement on 
     var pos = indices[Math.floor(indices.length * Math.random())]; 
     return str.substr(0, pos) + replacement + str.substr(pos + needle.length); 
    } else { 
     return str; 
    } 
} 

要叫它:

var newStr = replaceRandom('Some text here training and more bla bla bla. We can training this... Using training you can...', 'training', 'running'); 
// newStr now contains a single replacement 
+0

這一個不適用於我... – SomeoneWeird

+0

@SomeoneWeird解釋「不工作」,我已經添加了代碼來測試它。 –