1

このphpスピンタックスコードをhttp://www.edcharkow.com/blog/spintax-easy-php-code/からのソースであるjavascriptに正常に変換しました

しかし、結果が繰り返されることがあまりにも頻繁にある場合があり、最後にスピンされたスピンタックスを結果で確認することを考えています。

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'), '\\$&');
}
4

2 に答える 2

0

単純にしてください。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
于 2014-05-02T12:50:46.417 に答える