Как включить содержимое, не относящееся к синтаксису, в число строк - PullRequest
0 голосов
/ 17 апреля 2019

Мне нужно извлечь максимально возможный результат из моего синтаксиса.Но я не могу найти способ добавить в не раскрученный текст.Мой код извлекает самую длинную опцию, когда есть доступный выбор, но игнорирует содержимое вне фигурных скобок spintax.

var totalcount = 0;
var text = "{This is|Here} a {sample|demo} of a sentence {made with|created using} spintax";

var longtext = "";
var matches, options, random;
var regEx = new RegExp(/{([^{}]+?)}/);

while((matches = regEx.exec(text)) !== null) {  

  options = matches[1].split("|");
  var long1 = matches[1].split("|");
  var longest = long1[0];
  var strcount = 0;

  for (i = 0; i < long1.length; i++) {
    if (long1[i].length > longest.length) {
        longest = long1[i];
        }
       strcount = longest.length;
     }
      totalcount = totalcount + strcount;
      longtext = longtext + ' ' + longest;


  random = Math.floor(Math.random() * options.length);
  text = text.replace(matches[0], options[random]);
}

document.write('Random spin:<br>'+text+'<br><br>');
document.write('Longest spin ('+strcount+' chars):<br>'+longtext);

Цикл, который я использую для подсчета самых длинных опций, только подсчитываетвариации spintax.Так что это пропускает "a", "предложения" и "spintax"

Как бы я добавил их, чтобы они тоже учитывались?

Заранее спасибо ... и извините загрязный код!

1 Ответ

0 голосов
/ 20 апреля 2019

Мой друг из Facebook ответил на это для меня :) Так что для всех, у кого есть такие же вопросы, вот его решение:

<script>
var matches, options, random;

var spintaxString = "{London|Birmingham|Ely} is a {nice|wonderful|fabulous} place with some great {cafes | bars | restaurants}";
var longestString = spintaxString;
var regEx = new RegExp(/{([^{}]+?)}/);


while((matches = regEx.exec(spintaxString)) !== null) {
    options = matches[1].split("|");
    random = Math.floor(Math.random() * options.length);

    var longest = options[0];
    for (i = 0; i < options.length; i++) {
    if (options[i].length > longest.length) {
        longest = options[i];
        }
     }

    longestString = longestString.replace(matches[0], longest);
    spintaxString = spintaxString.replace(matches[0], options[random]);
}

document.write('Random: '+spintaxString+' ('+spintaxString.length+' chars)<br>');
document.write('Longest: '+longestString+'  ('+longestString.length+' chars)<br>');

</script>
...