Получить значение слагаемого из параметра, используя JavaScript - PullRequest
1 голос
/ 18 января 2020

У меня есть URL с таким форматом:

http://www.test.com/document/navigate/{{project_id}}/{{note_id}}

значение в {{}} будет заполнено целым числом, например,

http://www.test.com/document/navigate/1/3
http://www.test.com/document/navigate/7/2
http://www.test.com/document/navigate/3

значение для note_id в URL-адресе не является обязательным, но мне нужно получить оба значения для project_id и note_id. Как я могу этого достичь?

Ответы [ 2 ]

1 голос
/ 18 января 2020

Вы можете использовать регулярное выражение: http[s]?:\/\/www.test.com\/document\/navigate\/([\d]+)[\/]?([\d]+)?[\/]?.

По сути это макет протокола, имени хоста / домена и части пути, которую мы знаем. Затем есть две группы захвата - идентификатор проекта и идентификатор заметки (необязательно).

Вы можете использовать его следующим образом:

const url = 'http://www.test.com/document/navigate/1/3';
const parts = url.match(/http[s]?:\/\/www.test.com\/document\/navigate\/([\d]+)[\/]?([\d]+)?/);

console.log(parts[0]); // "http://www.test.com/document/navigate/1/3"  <- full match
console.log(parts[1]); // "1"  <- first group
console.log(parts[2]); // "3"  <- second group, which will be undefined if left off

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

Вот Regexr , показывающий вам, как это работает (это так я бездельничаю, пока не пойму правильно).

0 голосов
/ 18 января 2020

Один из способов использовать деталь navigate/ следующим образом:

var url1 = 'http://www.test.com/document/navigate/1/3';
var url2 = 'http://www.test.com/document/navigate/7/2';
var url3 = 'http://www.test.com/document/navigate/3';

function getValue(url){
  var arr = url.match(/navigate\/([^ ]*)/);
  arr = arr[arr.length - 1].split('/');
  if(arr.length == 1)
    return { project_id: +arr[0] };
  else if(arr.length == 2)
    return { project_id: +arr[0], note_id: +arr[1] };
  else
    return 'invalid';
}
console.log(getValue(url1));
console.log(getValue(url2));
console.log(getValue(url3));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...