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