我已成功将此 php spintax 代码转换为 javascript,来源来自http://www.edcharkow.com/blog/spintax-easy-php-code/
但有时重复的结果太频繁了,我想用结果检查最后一次纺纱,如果是真的,它应该继续纺。
现在我的问题是,如何在Spin(s)
每次执行旋转时从该函数创建一个新实例作为最后一个旋转结果?
我可能会以最直接的方式解决这个问题,但如果有更好的选择,我很想听听。
var text = "{{this|that} is {nice|awesome|great}!|What {are you|am I} doing?|I can't believe {this|that} is {happening|so awesome!}}";
alert( Spin(text) );
function Spin(s)
{
var m = s.match(/\{(.*?)\}/i);
if ( !m ) return s;
var t = m[1];
if ( t.indexOf("{") !== false )
{
t = t.substr(t.lastIndexOf("{") + 1);
}
var parts = t.split("|");
var regex = new RegExp("\{" + preg_quote(t) + "\}");
s = s.replace( regex, parts[Math.floor(Math.random() * parts.length)] );
return Spin(s);
}
function preg_quote(str, delimiter)
{
return String(str).replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + (delimiter || '') + '-]', 'g'), '\\$&');
}