Регулярное выражение, чтобы получить раздел URL после строки в Javascript

#sql #regex #apache-spark-sql

#язык JavaScript #регулярное выражение

Вопрос:

У меня есть следующий URL-адрес:

 http://data.test.com/api/v1/entity/1231  

И мне нужно получить текст, который находится после v1/ и до / (между косыми чертами), в данном случае слово entity . Я использую следующее регулярное выражение, но то, что я получаю, относится entity/1231 к группе 1:

 /^[^#?] /v1/([^?] ).*$/  

Есть какие-нибудь идеи о том, как избавиться 1231 или от чего-нибудь, что последует за entity этим ?

Комментарии:

1. v1/([^/] ) или v1/(.*?)/

2. Если детали закреплены "http://data.test.com/api/v1/entity/1231".split("/")[5]

3. Если URL-адреса, с которыми вы работаете, настолько предсказуемы, то регулярные выражения, хотя и возможны, могут быть слишком сложным инструментом для этой работы. Являются ли URL-адреса изменяемыми? Всегда ли это будет » после v1/ и до [следующего] / «?

4. @DavidThomas Да, они предсказуемы

5. Тебе нужно str.match(//v1/([^/] )/)[1]

Ответ №1:

Вы можете записать нужное вам значение в группу захвата с помощью new RegExp("/v1/([^/] )" :

 var str = "http://data.test.com/api/v1/entity/1231"; var res = str.match(new RegExp("/v1/([^/] )")); if (res)   console.log(res[1]); 

Спички /v1/([^/] ) :

  • /v1/ — буквальная строка /v1/
  • ([^/] ) — захват группы 1, соответствующей одному или нескольким символам, отличным от / .

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

Кроме того, поскольку ECMAScript 2018 включил использование lookbehind в шаблонах регулярных выражений JavaScript, вы также можете использовать подход, основанный на lookbehind, чтобы получить нужное значение непосредственно в целом.:

 const str = "http://data.test.com/api/v1/entity/1231"; const res = str.match(/(?lt;=/v1/)[^/] /); if (res) {  console.log(res[0]); } 

Подробные сведения:

  • (?lt;=/v1/) — положительный внешний вид, соответствующий местоположению, которому непосредственно предшествует /v1/ текст
  • [^/] — один или несколько символов, отличных от / символа.

Ответ №2:

попробуйте это:

 ^[^#?] /v1/([^?] ).*(w :{0,1}w*@)?(S )(:[0-9] )?(/1231)$