Javascript Regex - 仅匹配一组4个数字

时间:2017-11-08 22:29:19

标签: javascript regex

我是正则表达式的新手,并且无法提供符合我需要的表达式(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 

每行我需要的只是" b之后的4位数年份。 &#34 ;.所以如果我只返回我的比赛,那就是:

1735
1743
1756
1739
1744
1744
1782
1782
1780
1790
1792

无论我如何构建表达式,无论是我自己还是使用任何在线网络应用程序,它总是希望匹配所有 4位数年份,或者全部4 - 数字年份,包括我需要的数字。这当然部分归因于我缺乏经验,所以任何帮助都会非常感激。

3 个答案:

答案 0 :(得分:2)

使用正则表达式/b\. (\d{4})/应匹配列表中的所有出生日期。

答案 1 :(得分:1)

您可以使用此正则表达式:reader := bufio.NewReader(conn) readbuf := make([]byte, 1500) err := io.EOF for sockConnected { conn.SetReadDeadline(time.Now().Add(10 * time.Millisecond)) readbuf, err = reader.ReadBytes('\x04') switch { case err == io.EOF || err == io.ErrUnexpectedEOF: log.Println("Socket closed. EOF / ErrUnexpectedEOF read in") sockConnected = false case err == nil: //log.Println("No error on read") case strings.HasSuffix(err.Error(), "i/o timeout"): //log.Println("Timed out read") default: log.Println("Some other error occurred.Reason=" + err.Error()) } if len(readbuf) == 0 { continue } else { //log.Printf("Received from client=%v", string(readbuf)) log.Printf("Recvd Bytes count=%v", len(readbuf)) } } 并访问捕获组1以获取所需的值。

在此处试试:https://regex101.com/r/zxbrs0/1

答案 2 :(得分:1)

最简单的方法(在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;

如果你得到一般的想法,那么根据你的情况调整它并不困难。只需使用正则表达式(b.1735(在本例中)然后提取1735.这只是必要的,因为,不幸的是,Javascript中的正则表达式不允许与其他正则表达式引擎相同的外观功能。在另一个平台中你可以使用(?< = \(b。)来看看b。

我已经在Javascript中测试了这个脚本,所以它应该可以工作。

或者您也可以使用捕获括号。试试这个代替上面的正则表达式和var birthDate:

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

请记住,exec()应该返回一个数组,因此你需要指定你想要第二个元素([1])。

这也经过了测试。