Есть задача, нахождения подстроки в строке, в принципе это не проблема, если использовать indexOf()
Но дело в том, что мы не знаем, что ищем, мы знаем только контекст
У нас строки могут быть такого типа:
" .. from X to Y .. "
" .. из города X в город Y .. "
" .. из X в Y .. " (поможете регулярное выражение написать для этого случая, чтобы вытащить X и Y?)
" .. X - Y .. "
где X и Y предполагаемые города
Конечно, можно делать запрос к карте мира (Google) и сравнивать в строке X1 с X, Y1 с Y и тд
Но ведь городов в мире сотни тысяч, и это бессмысленно получается, нагрузка высокая
Ладно, когда пишем регулярное выражение для чисел и тд, но тут то как?
Для последнего: ([\wА-Яа-я\- ]+) - ([\wА-Яа-я\- ]+)
Чтобы последняя корректно работала к примеру с "Каменск-уральский", нужно чтобы разделяющее тире ОБЯЗАТЕЛЬНО обрамлялось пробелами (" - "), а типе в городах нет ("Ростов-на-дону", "Каменск-Уральский")...
-
Хороший сервис для работы с регулярками: https://regex101.com
Очень хорошее регулярное выражение, но все же, для сложных городов не работает первый вариант, например, если встретится New York, тогда после пробела он будет отброшен.
Можно так сделать.
Если учесть, что города начинаются с большой буквы и находятся не первым словом в предложении, то:
var s='from Moscow to Piter';
/* var s=' Moscow - Piter '; */
/* var s='из города Moscow в город Piter'; */
/* var s='из Moscow в Piter'; */
function findCities(str) {
var cities = [];
var strArray = str.split(' ');
for (var i=1; i<strArray.length; i++) {
if(strArray[i][0] === strArray[i][0].toUpperCase()) cities.push(strArray[i]);
}
return cities;
}
console.log(findCities(s)); // получаем на выходе ["Moscow", "Piter"]