正则表达式,匹配字符串后的任何数字

时间:2017-03-22 20:22:12

标签: javascript regex

我的字符串如下所示:

\r\n\r\n\t\"unittime\":\"2017010100\", \r\n\t\"count"\r 

使用正则表达式我希望匹配“unittime”一词之后和“”之前的任何数字,最后,我该怎么做?

因此对于上面的字符串,我最终会用

result = 2017010100

2 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式:

unittime[^,]*?(\d+)



var s = '\r\n\r\n\t\"unittime\":\"2017010100\", \r\n\t\"count"\r ';
var num = +(s.match(/unittime[^,]*?(\d+)/) || [])[1];

console.log(num);




解释

  • [^,]匹配任何不是逗号的字符
  • *?为了匹配完整的正则表达式,尽可能少地重复前一个模式(=懒惰,而非贪婪)
  • ( ):创建一个捕获组,稍后可以引用该
  • \d:匹配数字
  • +:与之前的模式匹配一​​次或多次(贪婪)

s.match返回一个数组,首先是完全匹配(unittime\":\"2017010100),在下一个元素中返回捕获组的值:我们只有一个这样的组,所以在索引1我们&#39 ;得到2017010100

如果没有匹配项,则.match()将返回null。在这种情况下,||将启动并创建一个空数组。无论哪种方式,结果都是一个数组。使用[1]进行捕获组匹配。当然,[]没有这样的元素,所以在这种情况下你得到undefined

最后,此结果(字符串或undefined)将转换为具有单一+的数字。

答案 1 :(得分:0)

也许使用捕获组?

/(unittime)(\D+)(\d+)(\D+)(,)

第三个捕获组(\d+)是您的号码。

第一组匹配' unittime'。 第二个匹配任意数量的非数字。 第三是你的号码。 第四是更多的非数字。 第五是结束昏迷。