Вопрос:

Javascript Regex - совпадать только на одном наборе из 4 чисел

javascript regex

53 просмотра

3 ответа

715 Репутация автора

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

Для этого примера:

21 Apr 1789 -  4 Mar 1797  John Adams                        (b. 1735 - d. 1826)  Fed 
 4 Mar 1797 -  4 Mar 1801  Thomas Jefferson                  (b. 1743 - d. 1826)  D-R 
 4 Mar 1801 -  4 Mar 1805  Aaron Burr                        (b. 1756 - d. 1836)  D-R 
 4 Mar 1805 - 20 Apr 1812  George Clinton                    (b. 1739 - d. 1812)  D-R 
 4 Mar 1813 - 23 Nov 1814  Elbridge Gerry                    (b. 1744 - d. 1814)  D-R 
 4 Mar 1817 -  4 Mar 1825  Daniel D. Tompkins                (b. 1744 - d. 1825)  D-R 
 4 Mar 1825 - 28 Dec 1832  John Caldwell Calhoun             (b. 1782 - d. 1850)  Dem 
 4 Mar 1833 -  4 Mar 1837  Martin van Buren                  (b. 1782 - d. 1862)  Dem 
 4 Mar 1837 -  4 Mar 1841  Richard Mentor Johnson            (b. 1780 - d. 1850)  Dem 
 4 Mar 1841 -  4 Apr 1841  John Tyler                        (b. 1790 - d. 1862)  Whg  
 4 Mar 1845 -  4 Mar 1849  George Mifflin Dallas             (b. 1792 - d. 1864)  Dem 

В каждой строке мне нужен только 4-значный год, который следует после «b». Так что, если бы я вернул только свои спички, это было бы:

1735
1743
1756
1739
1744
1744
1782
1782
1780
1790
1792

Независимо от того, как я пытаюсь построить выражение, будь то самостоятельно или с помощью любого из веб-приложений в Интернете, оно всегда должно совпадать по всем 4-значным годам или всем 4-значным годам вплоть до того, которое я нужно. Это, безусловно, отчасти связано с отсутствием опыта на моей стороне, поэтому любая помощь будет принята с благодарностью.

Автор: Stpete111 Источник Размещён: 08.11.2017 10:29

Ответы (3)


2 плюса

1722 Репутация автора

Решение

Использование регулярного выражения /b\. (\d{4})/должно соответствовать всем датам рождения в списке.

Автор: John Ellmore Размещён: 08.11.2017 10:33

1 плюс

541 Репутация автора

Вы можете использовать это регулярное выражение: b\.\s(\d{4})и получить доступ к группе захвата 1, чтобы получить нужные значения.

Попробуйте это здесь: https://regex101.com/r/zxbrs0/1

Автор: omijn Размещён: 08.11.2017 10:34

1 плюс

94 Репутация автора

Самый простой способ сделать это (в Javascript, так как вы пометили Javascript в этом вопросе) - это просто сделать два регулярных выражения. Например, вы могли бы сделать это.

var str = '4 Mar 1797  John Adams                        (b. 1735 - d. 1826)';
var regex = /\(b. [0-9]+/;
var regex2 = /[0-9]+/;
var birthDate = regex2.exec(regex.exec(str));
return birthDate;

Если у вас есть общее представление, не сложно адаптировать его к вашим обстоятельствам. Просто используйте регулярное выражение для поиска (р. 1735 (в данном случае), а затем извлеките 1735. Это необходимо только потому, что, к сожалению, регулярное выражение в Javascript не позволяет использовать ту же функцию, что и другие движки регулярных выражений. В другой платформе Вы можете использовать (? <= \ (b.), чтобы просто посмотреть за b.

Я тестировал этот скрипт в Javascript, поэтому он должен работать.

В качестве альтернативы вы также можете использовать захват скобок. Попробуйте это вместо регулярных выражений и var birthDate выше:

var regex = /\(b. ([0-9]+)/;
var birthDate = regex.exec(str)[1];

Просто помните, что exec () должен возвращать массив, поэтому вам нужно указать, что вам нужен второй элемент ([1]).

Это также проверено.

Автор: Mearg Размещён: 08.11.2017 11:01
Вопросы из категории :
32x32