регулярное выражение для извлечения числа и даты из строки - PullRequest
1 голос
/ 17 июня 2020

Я пытаюсь извлечь из строки дату, процент или число. Строки могут быть:

  1. значение ответа 10 (отсюда я хочу извлечь 10)
  2. значение ответа 10/12/2014 (отсюда я хочу извлечь 10/12 / 2014)
  3. значение ответа 08/2015 (отсюда я хочу извлечь 08/2015)

Я написал регулярное выражение как (?:\d{2}\/\d{4}|\d{2}(?:\/\d{2}\/\d{4})?) Regex удовлетворяет 12/12 / 2014, 10, 02/2012.

Я также пытаюсь изменить то же регулярное выражение, чтобы получить 10, 08/2015 и 10/10/2015, но не понимаю, как получить.

Как этого добиться?

Ответы [ 3 ]

2 голосов
/ 17 июня 2020

Чтобы сопоставить данные вашего примера, вы можете использовать чередование, совпадающее либо с 2 цифрами / 4 цифрами, либо с сопоставлением 2 цифр с дополнительной частью, которая соответствует 2 цифрам и 4 цифрам.

\b(?:\d{2}\/\d{4}|\d{2}(?:\/\d{2}\/\d{4})?)\b

Объяснение

  • \b Граница слова, предотвращает включение слова char в большее слово
  • (?: Группа без захвата
    • \d{2}\/\d{4} Сопоставьте 2 цифры / 4 цифры
    • | Или
    • \d{2} Сопоставьте 2 цифры
    • (?:\/\d{2}\/\d{4})? Необязательно сопоставьте / 2 цифры / 4 цифры
  • ) Закрыть группу
  • \b Граница слова

Regex demo

Примечание , что 2 и 4 цифры также могут соответствовать 99 и 9999. Если вы хотите сделать соответствие более конкретным c, эта страница может быть полезной https://www.regular-expressions.info/dates.html

const pattern = /\b(?:\d{2}\/\d{4}|\d{2}(?:\/\d{2}\/\d{4})?)\b/;
[
  "the response value 10",
  "the response value 10/12/2014",
  "the response value 08/2015"
].forEach(s => console.log(s.match(pattern)[0]));
1 голос
/ 17 июня 2020

Просто для удовольствия (регулярное выражение - это развлечение), альтернатива принятому ответу:

\b(?:(?:\d\d\/){1,2}\d{4}|\d\d)\b

См. онлайн-демонстрацию

  • \b - Соответствует границе слова.
  • (?: - 1-я группа без захвата.
    • (?: - 2-я группа без захвата.
      • \d\d\/ - соответствие двух цифр и буквального прямого слэша sh.
      • ){1,2} - Закройте вторую группу без захвата и используйте ее один или два раза.
    • \d{4} - четыре цифры.
    • | - Чередование (ИЛИ).
    • \d\d) - Две цифры и закрытие 1-й не захватывающей группы.
  • \b - соответствие границы слова.

enter image description here


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

\b\d\d(?:(?:\/\d\d){1,2}\d\d)?\b

См. Онлайн-демонстрацию

  • \b - Сопоставьте границу слова.
  • \d\d - совпадение двух цифр.
  • (?: - 1-я группа без захвата.
    • (?: - 2-я группа без захвата.
      • \/\d\d - сопоставить буквальный sla sh и две цифры.
      • ){1,2} - закрыть вторую группу без захвата и использовать ее один или два раза.
    • \d\d - совпадение двух цифр.
    • )? - закрыть 1-ю группу без захвата и сделать ее необязательной.
  • \b - Сопоставьте границу слова.

enter image description here

0 голосов
/ 17 июня 2020

Метод Match поддерживает regExp и вернет массив с элементами, которые вы ищете:

var date = "12/12/2014"

	var arr = date.match(/(\d{2})[\/](\d{2})[\/](\d{4})/);

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