我的字符串如下所示:
\r\n\r\n\t\"unittime\":\"2017010100\", \r\n\t\"count"\r
使用正则表达式我希望匹配“unittime”一词之后和“”之前的任何数字,最后,我该怎么做?
因此对于上面的字符串,我最终会用
result = 2017010100
答案 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'。 第二个匹配任意数量的非数字。 第三是你的号码。 第四是更多的非数字。 第五是结束昏迷。