【发布时间】:2016-06-23 12:08:35
【问题描述】:
我有这样的句子:
var str = 'The <adjective> <noun> and <noun> <title>';
我想用相关数组中的随机值替换每个 <pattern>。
在我之前的示例中,我希望得到类似于:
var adjectives = ['big' 'small' 'funny'];
var nouns = ['dog', 'horse', 'ship'];
var title = ['bar', 'pub', 'club'];
var str = 'The <adjective> <noun> and <noun> <title>';
var r = str.replacePatterns({ noun: nouns, adjective: adjectives, title: titles });
console.log(r); // The big horse and ship club
在同一个句子中两次使用相同的模式(例如<noun>),我几乎明白了。所以我只为每个模式生成一个随机值...
String.prototype.replacePatterns = function (hash) {
var string = this,
key;
for (key in hash) {
if (hash.hasOwnProperty(key)) {
var randomValue = hash[key][Math.floor(Math.random() * hash[key].length)];
string = string.replace(new RegExp('\\<' + key + '\\>', 'gm'), randomValue);
}
}
return string;
};
你能帮我用随机值而不是全局替换来替换每个模式吗?
我不知道如何循环正则表达式的结果来替换原句中的匹配项(每次都是随机值)。
【问题讨论】:
-
使用回调函数进行替换,并让它返回随机值。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
-
@CBroe 确实......我用一个返回随机值的函数替换了
randomValue,它可以工作!
标签: javascript regex random replace