Разделить строку до слова в JavaScript - PullRequest
0 голосов
/ 02 июля 2019

Я должен разбить строку до слова в JavaScript.

var urlCurrent = "www.example.com/web/americas/home";
var siteNames = ["americas","international","europe","asia-pacific","africa-middle-east","russia","india"];
var siteNamesJoin = siteNames.join('|');
var siteUrlCurrent = urlCurrent.split(siteNamesJoin);

Здесь я должен разделить строку urlCurrent, используя слова в массиве. так что в конце я должен получить www.example.com/web/americas. Я не получаю регулярное выражение для этого.

Ответы [ 3 ]

3 голосов
/ 02 июля 2019

Вы можете использовать

new RegExp("^.*?(?:" + siteNamesJoin + "|$)")

Шаблон будет выглядеть как

^.*?(?:americas|international|europe|asia-pacific|africa-middle-east|russia|india|$)

См. График регулярных выражений :

enter image description here

Подробности

  • ^ - начало строки
  • .*? - любые 0 или более символов, другиечем символы разрыва строки, как можно меньше
  • (?:americas|international|europe|asia-pacific|africa-middle-east|russia|india|$) - любое из значений между трубами или концом строки.

См. демонстрацию JS:

var urlCurrent = "www.example.com/web/americas/home";
var siteNames = ["americas","international","europe","asia-pacific","africa-middle-east","russia","india"];
var siteNamesJoin = siteNames.join('|');
var match = urlCurrent.match(new RegExp("^.*?(?:" + siteNamesJoin + "|$)"));
var siteUrlCurrent = match ? match[0] : "";
console.log(siteUrlCurrent);

ПРИМЕЧАНИЕ: если siteNames «слова» могут содержать специальные метасимволы регулярных выражений, вам нужно будет экранировать элементы siteNames:

var siteNamesJoin = siteNames.map(function (x) { return x.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') }).join('|');

Кроме того, если эти слова должны совпадать между / или концом строки, вы можете изменить шаблон:

var match = urlCurrent.match(new RegExp("^(.*?)/(?:(?:" + siteNamesJoin + ")(?![^/])|$)"));

См. Другую демонстрацию.

var urlCurrent = "www.example.com/web/americas/home";
var siteNames = ["americas","international","europe","asia-pacific","africa-middle-east","russia","india"];
var siteNamesJoin = siteNames.map(function (x) { return x.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') }).join('|');
var match = urlCurrent.match(new RegExp("^.*?/(?:(?:" + siteNamesJoin + ")(?![^/])|$)"));
var siteUrlCurrent = match ? match[0] : "";
console.log(siteUrlCurrent);
0 голосов
/ 02 июля 2019

с использованием регулярных выражений и совпадений

var urlCurrent = "www.example.com/web/americas/home";
var siteNames = ["americas","international","europe","asia-pacific","africa-middle-east","russia","india"];
var regex = new RegExp(siteNames.join('|'));
var match = urlCurrent.match(regex);
if(match) {
  var url = urlCurrent.substr(0, match[0].length + match.index)
console.log(url);
} else {
//invalid url 
}
0 голосов
/ 02 июля 2019

Может быть, это поможет вам, я думаю, вам не нужно регулярное выражение:


var urlCurrent = "www.example.com/web/americas/home";
var siteNames = ["americas","international","europe","asia-pacific","africa-middle-east","russia","india"];
var siteNamesJoin = siteNames.join('|');
var siteUrlCurrent = urlCurrent.split(siteNamesJoin);

const pos = urlCurrent.split("/")[2];
let url;

for(const index in siteNames) {
  if(pos === siteNames[index]) {
     url = urlCurrent.substring(0,urlCurrent.lastIndexOf("/"));
  }
}

console.log(url);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...