Шаблон RegEx для поиска номеров в Google Apps Script (Javascript 1.6) - PullRequest
0 голосов
/ 10 мая 2018

У меня есть массив чисел от 0 до 10 ["0", "1", ..., "10"], и я использую text.search(array[i]), где текст содержит "10" (это 10),Код всегда находит «1», но не «10».Могу ли я создать RegExp, чтобы найти 10?

Большое спасибо.

function analizar(text) {
  var querer =  ["baja", "muestra", "ver", "imprim"];
  var tema = ["contenido", "asunto", "materia", "texto", "leccion"];
  var temas =[" 0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];

  var keys = [querer, tema, temas];
  var resultado = 0;

  var str = []
  for (var a = 0; a < keys.length; a++){
    for (var b = 0; b < keys[a].length; b++){

      var actual = keys[a];
      var buscar = actual[b];

вот в чем проблема.Я не знаю, как искать точный номер 10

      if (a == "2") {var buscar = new RegExp(actual[b]);}
      var val = text.search (buscar)
      if (val > -1) {
        resultado++;
        if(a == "2") {str.push(keys[a][b])}
        break;
      }
    }
  }

  Logger.log(str[0]);

  if (resultado == 3) {return str[0]}
  if (resultado != 3) {return "";}
}

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Первая проблема заключается в поиске по номерам от низкого до высокого. Это будет означать, что мы находим 1 и возвращаемся, тогда как мы должны были быть жадными и соответствовать 0 после 1, чтобы соответствовать полному 10.

Так что просто переставим ваш массив:

var temas =[ "10", " 0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];

должен дать правильный вывод.

Однако вы вовсе не используете регулярные выражения для их истинной силы. Одно регулярное выражение может описать весь этот массив:

/10?|[2-9]| 0/

Распределение регулярных выражений:

10?: соответствует символу 1, который встречается ровно один раз, а затем 0 1 или 0 раз. ( это захватывает случай 1 и случай 10 )
|: это операция OR. Сопоставьте выражение слева или справа.
[2-9]: соответствует одному символу в диапазоне от 2 до 9
|: еще один OR
0: соответствует символу ровно один раз, за ​​которым следует ровно один 0 символ.

0 голосов
/ 10 мая 2018

Проблема заключается в порядке ваших строк регулярных выражений в массиве temas.Поскольку вы проверяете строку для 1, а затем для 10, любая строка, содержащая 10, всегда будет соответствовать 1.Поскольку вы разбиваете после матча, вы никогда не доберетесь до 10.

. Вам нужно переместиться на 10 перед 1, тогда он будет работать, как и ожидалось.

var temas =[" 0", "10", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...