我已成功将此php spintax代码转换为javascript,其来源为http://www.edcharkow.com/blog/spintax-easy-php-code/

但是有时候重复的结果太过频繁了,我正在考虑检查最后一次旋转的spintax的结果,如果是真的,它应该继续旋转。

现在的问题是,每次执行旋转操作时,如何根据该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'), '\\$&');
}

最佳答案

保持简单-Spin函数应该生成旋转文本,而没有其他内容。
使用其他功能来执行您想要的操作。

这是一个比较包装的快速包装:

var prev = "";

var getNewSpun = function(prevSpun) {
     var newspun = Spin(text);
     while (newspun == prevSpun) {
       newspun = Spin(text);
     }
     return newspun;
};


prev = getNewSpun(prev); // this should be different every time

10-04 12:12