сравнение с регулярным выражением

133
13 января 2018, 02:50

Скрипт получает переменную и сравнивает ее со значением, и при равенстве выполняет код
else if(result === 'Сколько времени'){ ... }

Проблема в том, что хочется как-то через регулярные выражение сделать, чтобы он сравнивал похожие варианты( сколько сейчас времени, какое время). Не работал с такими выражениями и не представляю как тут реализовать такое(можно конечно через кучу условий, но слишком много получится).

Answer 1

Вот такое выражение составил

"(подскажите\s+?){0,1}(сколько|какое|которое|который)(\s+?сейчас){0,1}\s+?(времени|время|час|часов)"

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

Тестируем тут - https://regex101.com/r/hkJw1k/1

код проверки может быть такой:

var regex = /(подскажите\s+?){0,1}(сколько|какое|которое|который)(\s+?сейчас){0,1}\s+?(времени|время|час|часов)/; 
 
function TestTimeRegex(str) { 
  return str.search(regex) != -1; 
} 
 
console.log(TestTimeRegex("подскажите сколько сейчас времени")); 
console.log(TestTimeRegex("трам пам время"));

В вашем случае

else if(TestTimeRegex(result)){
        ...
}
Answer 2

Я бы начал с того что завёл списочек всех вариантов, пока просто в текстовом виде, из него будет ясно как лучше запрограммировать такую систему.

Дело в том что если вариантов очень много, то писать регулярное выражение может быть сложное дело, а кроме того оно может выглядеть очень некрасиво.

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

Можно даже просто сделать массив и просто в цикле саму проверку сделать, если есть одно совпадение, значит совпало. В любом случае красивее чем тупо подряд условия писать.

READ ALSO
Minecraft Server Hash ID [требует правки]

Minecraft Server Hash ID [требует правки]

Как можно получить хэш сервера Minecraft? Почитал здесь (Server ID String), но ничего не понялПишу на PHP

236
Как получить уведомление о платеже от Яндекс.Касса?

Как получить уведомление о платеже от Яндекс.Касса?

Всем приветПервый раз связался с Яндекс

264
Как воспользоваться ООП?

Как воспользоваться ООП?

Пишу не большой Product List с функциями CRUDРеализовал это всё в процедурном стиле, сейчас переделываю на ООП вариант, и немножко подвис вопрос...

218
Разбор многомерного массива

Разбор многомерного массива

Есть скрипт, который выдает информацию в таком виде:

208