Javascript — как я могу получить определенное значение из маршрута, используя регулярное выражение?

#javascript #regex

#javascript #регулярное выражение

Вопрос:

Я хотел бы получить число, указанное в маршруте, используя регулярное выражение. Число всегда будет отображаться в четвертой позиции, хотя числа могут быть в третьей позиции и больше (третий, четвертый, пятый и т. Д.).

(знак «x» в приведенных ниже примерах может представлять символы, цифры или символы)

пример маршрутов:

 /first/second/third/3
/first/second-xxx/third-xxx-xxx/3
/first/second/third/3/
/first/second/third/3/xxx
/first/second/third/3/xxxx/x
 

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

1. Нам понадобится дополнительная информация, чтобы ответить на этот вопрос. Какой тип регулярных выражений вы используете? Это единственный числовой символ в строке? Могут ли быть две косые черты подряд? Вам нужно отредактировать эту информацию, чтобы мы могли предложить вам лучшее решение. Если вы действительно используете PCRE, а другие части маршрута могут содержать числа, и в них нет двойных косых черт, это было бы моим решением: ^(?:. ?/){3}Kd .

2. @CharlieArmstrong Я надеюсь, что сейчас это имеет больше смысла, хотя я не был уверен, что вы подразумеваете под «двумя косыми чертами подряд» и «регулярным выражением».

3. Разновидность регулярных выражений — это способ, которым конкретный механизм регулярных выражений анализирует регулярное выражение, поскольку все они немного отличаются. Я вижу, вы указали, что это Javascript, так что это именно то, что я искал. Что касается двойной косой черты, что регулярное выражение должно делать с таким маршрутом /first//third/1/2 ? Что касается подсчета косых черт, регулярное выражение должно возвращаться 1 , но это то, что вы хотите, чтобы оно делало? Или он должен возвращать 2 и считать двойную косую черту как одну косую черту? Предполагая последнее, я бы обновил свое решение следующим образом: ^(?:. ?/){3}(d)

4. @CharlieArmstrong Спасибо за объяснение, а в отношении двойных косых черт оно должно возвращать «1»

Ответ №1:

если я понимаю ваш вопрос:

 /.*?/.*?/.*?/(d )/*.*
 

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

1. Я изменил » w» на » d «, поэтому я получу только числа (в случае, если есть символы) и более одного, если они существуют.

2. Я тоже изменился.

3. вы забыли добавить » » после «d»

Ответ №2:

Сначала создайте шаблон для поиска перед числом

  • ^: С начала строки
  • (/ w ){3}: найти три последовательных вхождения ‘SomeWordCharacters’
  • /: За которым следует другой ‘/’

Затем объедините это с самим числом в качестве шаблона для вывода

  • (?<=^(/w ){3}/): Возьмите шаблон, созданный выше, и найдите его место перед шаблоном, который вы хотите вывести.
  • d : интересующий шаблон, который вы действительно хотите вывести

Все вместе:

 (?<=^(/w ){3}/)d 
 

Ответ №3:

Обновить

Этот ответ не решает вопрос, поскольку было разъяснено, что x может содержать цифры.

Оригинальный ответ

Если число является единственным числом в строке, этого должно быть достаточно:

 [0-9] 
 

Соответствует любому числу длиной 1 или больше.