Javascript: запуск функции сопоставления регулярных выражений на 100 фрагментов текста

Я написал код javascript, который обрабатывает пакет текста на куски по 100 символов и выполняет совпадение регулярного выражения (т.е. 5 апельсинов, 6 яблок, 20 груш в тексте) отдельно.

Мне нравится, что скрипт regex-match будет автоматически запускаться для каждого фрагмента (на 100 символов) и выводить результаты совпадения в последовательности, предпочтительно отформатированной внутри таблицы.

Проблема: 1) Функция регулярного выражения не запускается на новых фрагментах каждый раз, когда строка разрезается на 100 символов 2) Я изо всех сил пытаюсь зациклить функцию регулярного выражения

Ваша помощь очень ценится.

var str = " Apple Pears Bananas Apple Pears Bananas Apple Pears Bananas  Apple Pears Bananas Apple Pears Bananas Apple Pears Bananas Apple Pears Bananas....";
var chunks = [];
var chunkSize = 100;

while (str) {
  if (str.length < chunkSize) {
    chunks.push(str);
    break;
  } else {
    chunks.push(str.substr(0, chunkSize) + total() + "<p></p>");
    /// I tried to run the regex match function in this line for each new chunk of 100 characters but failed
    str = str.substr(chunkSize);
  }
}


function getMatches(string, regex, index) {
  index || (index = 1);
  var matches = [];
  var match;
  while (match = regex.exec(string)) {
    matches.push(match[index]);
  }
  return matches;
}

function total() {
    var myString = str;/// I'm trying to pick up each new chunks (100 characters) 
    var myString;

    var myRegEx_apple = /(?:^|\s)apple(.*?)(?:\s|$)/g;
    var matches = getMatches(myString, myRegEx_apple, 1);
    document.getElementById("myRegEx_apple").innerHTML = (matches.length + ' apple matches found' + '\n');

    var myRegEx_pears = /(?:^|\s)pears(.*?)(?:\s|$)/g;
    var matches = getMatches(myString, myRegEx_pears, 1);
    document.getElementById("myRegEx_pears").innerHTML = (matches.length + ' pears matches found' + '\n');


person Lirik W    schedule 03.12.2015    source источник


Ответы (1)


Похоже, вы не пытались решить свою проблему поэтапно.

  1. Вы должны попытаться получить действительные фрагменты и проверить их, прежде чем переходить к следующему шагу. (Я не мог понять, где вы делаете это правильно в своем коде, извините, если я что-то упустил).

  2. Переберите все элементы массива кусков и сопоставьте строку с каждым из 3 терминов («Яблоко», «Груши», «Бананы»).

Попробуйте использовать эту функцию, чтобы разбить строку на фрагменты по 100 символов:

function chop(str){
   return str.match(/.{1,100}/g);
}

с

chunks=chop(str);

вы должны получить массив строк из 100 символов. Оттуда вы переходите к шагу 2. Убедитесь, что вы используете флаг «g» (глобальный флаг) в/после вашего регулярного выражения.

person Angry Coder    schedule 03.12.2015
comment
Здравствуйте, Angry Coder, спасибо за ваш комментарий! Не могли бы вы помочь мне решить эту проблему на jfiddle? Я лучше всего учусь на примере. Честно говоря, я натыкаюсь на кирпичную стену, и это сводит меня с ума. - person Lirik W; 05.12.2015
comment
эта скрипка должна дать вам хорошую отправную точку. Есть основы, но вам еще предстоит кое-что сделать, чтобы улучшить их. Это только часть JS, вы можете запустить код в консоли Chrome или в своей системе. jsfiddle.net/p7kh5y49/2 - person Angry Coder; 08.12.2015