我有这样一句话:
\/Date(1475832958000)\/
我想从中提取一个数字。我这样做了:
var regex = /(\d+)/;
var str = '\/Date(1475832958000)\/';
console.log(str.match(regex));
//["1475832958000", "1475832958000"]
我得到一个包含2个元素的数组。我不懂为什么。请帮忙。
答案 0 :(得分:2)
在正则表达式()
is using for capturing group中,第一个元素是完全匹配,第二个元素是捕获的值。
来自MDN docs:
包含整个匹配结果和任何括号捕获的匹配结果的数组;如果没有匹配则为null。
如果您只想在括号内获取数字,请转义括号(通过添加反斜杠,\
)。
var regex = /\(\d+\)/;
var str = '\/Date(1475832958000)\/';
console.log(str.match(regex));
// or in case you just want to get the number
// then use capturing group
var regex1 = /\((\d+)\)/;
console.log(str.match(regex1));
答案 1 :(得分:1)
因为正则表达式中的()
定义了捕获组。 match
返回一个数组,其中匹配位置0的整个正则表达式,后跟捕获组中匹配的任何内容作为后续条目。
您可能希望正则表达式为/^\/Date\((\d+)\)\/$/
,并将[1]
处的结果用作数字:
var str = '/Date(1475832958000)/';
var rex = /^\/Date\((\d+)\)\/$/;
var result = str.match(rex);
if (result) {
var num = result ? +result[1] : null;
console.log("Number: " + num);
var dt = new Date(num);
console.log("Date: " + dt.toString());
}
正则表达式/^\/Date\((\d+)\)\/$/
表示:
^
- 输入开始\/Date\(
- 文字/Date(
。我们必须转义/
,否则它会终止正则表达式,我们必须转义(
所以它是文字(
而不是启动捕获组。(\d+)
- 捕获一个或多个数字的捕获组。\)\/
- 文字)/
。$
- 输入结束附注:字符串文字\/
中的'\/Date(1475832958000)\/'
只是/
s,不需要反斜杠。 '\/Date(1475832958000)\/'
和'/Date(1475832958000)/'
是完全相同的字符串。