У меня есть массив чисел от 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 "";}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проблема заключается в порядке ваших строк регулярного выражения в массиве temas. Поскольку вы проверяете строку для 1, а затем для 10, любая строка, содержащая 10, всегда будет соответствовать 1. Поскольку после матча вы ломаетесь, вы никогда не доберетесь до 10.
Вам нужно переместить 10 перед 1, тогда он будет работать должным образом.
var temas =[" 0", "10", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
Первая проблема заключается в том, что вы выполняете поиск по числам от меньшего к большему. Это будет означать, что мы находим 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
.
|: другой OR0: совпадение с символом ровно один раз, за которым следует ровно один символ 0.
Большое спасибо. Это идеальное решение