2016-05-16 4 views
2

Возможно ли вернуть массив с двумя важными регулярными выражениями?Результаты группы regex и/или

Что-то вроде этого - /(?=.*\d days)(?=.*car|truck|motorcycle)/

Первая проблема заключается в том, что регулярное выражение не соответствует автомобиля или других транспортных средств ... Во-вторых - это возможность извлечь количество дней ...*\d days(... в отдельное значение массива?

В данный момент мой регулярное выражение - /(?=.*\d days)(?=.*car)/ и ответ - [ '', index: 0, input: '5 days before cleaning the car' ] и я стремлюсь - [ '5', index: 0, input: '5 days before cleaning the car']

Входы

5 days before cleaning a car 
Motorcycle cleaning in 23 days 
truck will arrive in 10 days 

В основном я хочу, чтобы получить количество дней для любой из транспортных средств, которые могут существовать в коротком тексте.

+1

Что вход выглядеть ?! –

+0

Обновлен вопрос, чтобы включить потенциальные ресурсы и то, что я ожидаю получить. – Ando

+0

И ваша цель - просто захватить количество дней? –

ответ

3

Описание

^(?=.*?([0-9]+)\s*days)(?=.*?(motorcycle|truck|car)).* 

Regular expression visualization

Это регулярное выражение будет делать следующее:

  • захвата количество дней
  • захвата тип транспортного средства

Примеры

Live Demo

https://regex101.com/r/qY5nL6/1

Образец текста

5 days before cleaning a car 
Motorcycle cleaning in 23 days 
truck will arrive in 10 days 

Образец Матчи

[0][0] = 5 days before cleaning a car 
[0][1] = 5 
[0][2] = car 

[1][0] = Motorcycle cleaning in 23 days 
[1][1] = 23 
[1][2] = Motorcycle 

[2][0] = truck will arrive in 10 days 
[2][1] = 10 
[2][2] = truck 

Объяснение

NODE      EXPLANATION 
---------------------------------------------------------------------- 
^      the beginning of a "line" 
---------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
---------------------------------------------------------------------- 
    .*?      any character except \n (0 or more times 
          (matching the least amount possible)) 
---------------------------------------------------------------------- 
    (      group and capture to \1: 
---------------------------------------------------------------------- 
     [0-9]+     any character of: '0' to '9' (1 or 
           more times (matching the most amount 
           possible)) 
---------------------------------------------------------------------- 
    )      end of \1 
---------------------------------------------------------------------- 
    \s*      whitespace (\n, \r, \t, \f, and " ") (0 
          or more times (matching the most amount 
          possible)) 
---------------------------------------------------------------------- 
    days      'days' 
---------------------------------------------------------------------- 
)      end of look-ahead 
---------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
---------------------------------------------------------------------- 
    .*?      any character except \n (0 or more times 
          (matching the least amount possible)) 
---------------------------------------------------------------------- 
    (      group and capture to \2: 
---------------------------------------------------------------------- 
     motorcycle    'motorcycle' 
---------------------------------------------------------------------- 
    |      OR 
---------------------------------------------------------------------- 
     truck     'truck' 
---------------------------------------------------------------------- 
    |      OR 
---------------------------------------------------------------------- 
     car      'car' 
---------------------------------------------------------------------- 
    )      end of \2 
---------------------------------------------------------------------- 
)      end of look-ahead 
---------------------------------------------------------------------- 
    .*      any character except \n (0 or more times 
          (matching the most amount possible)) 
---------------------------------------------------------------------- 
+0

Вы писали это объяснение и сами рисовали это изображение или есть какой-то полезный инструмент, о котором я не знаю, что это делает автоматически? – Keatinge

+1

WOW! Просто вау! Какой отличный ответ! Спасибо за все объяснение! Как вы сделали график btw?Можете ли вы предложить хорошую книгу о регулярном выражении или ресурсы, которые могут помочь мне изучить ее. Это такой увлекательный навык! – Ando

+0

Я узнал регулярные выражения из [regular-expression.info] (http://www.regular-expressions.info/). Сайт очень подробный и объясняет, как работает двигатель. Однако это не простое чтение, планирование нескольких дней на каждой подстранице. О диаграмме я использовал [debuggex.com] (http://www.debuggex.com). Я никоим образом не связан с сайтом, кроме частых пользователей. –

Смежные вопросы