我很抱歉,如果這聽起來很傻,但我是新的JavaScript,和我想要做的是這樣的:如何用JavaScript代替文章中的隨機匹配文字?
比方說,我有一些文章用關鍵字裏面,例如像「培訓 」。文章會是這樣的:
這裏的一些文字培訓和更多bla bla bla。我們可以培訓這... 使用培訓你可以...
現在我想做的是與我們說「乳寧」代替「培訓」是什麼,但我不希望它們全部被替換,我只想替換其中的一個(隨機的)。
我該如何使用JavaScript來做到這一點?
我很抱歉,如果這聽起來很傻,但我是新的JavaScript,和我想要做的是這樣的:如何用JavaScript代替文章中的隨機匹配文字?
比方說,我有一些文章用關鍵字裏面,例如像「培訓 」。文章會是這樣的:
這裏的一些文字培訓和更多bla bla bla。我們可以培訓這... 使用培訓你可以...
現在我想做的是與我們說「乳寧」代替「培訓」是什麼,但我不希望它們全部被替換,我只想替換其中的一個(隨機的)。
我該如何使用JavaScript來做到這一點?
我寫了一個小的少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);
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);
我不是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;
}
}
即時通訊不知道如何使用這一個:)對不起,但喜歡說,即時通訊新的JS。 – SomeoneWeird
我已經添加了一個示例 – Andreas
它不工作... :( – SomeoneWeird
寫道,建立主字符串內的子位置的列表,然後執行一個單一的隨機置換函數:
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
這一個不適用於我... – SomeoneWeird
@SomeoneWeird解釋「不工作」,我已經添加了代碼來測試它。 –
http://stackoverflow.com/a/12604533/1250044 – yckart