来自perl / python世界我想知道是否有一种更简单的方法可以在javascript中从regexp过滤掉多个捕获的变量:
#!/usr/bin/env node
var data=[
"DATE: Feb 26,2015",
"hello this should not match"
];
for(var i=0; i<data.length; i++) {
var re = new RegExp('^DATE:\\s(.*),(.*)$');
if(data[i].match(re)) {
//match correctly, but how to get hold of the $1 and $2 ?
}
if(re.exec(data[i])) {
//match correctly, how to get hold of the $1 and $2 ?
}
var ret = '';
if(data[i].match(re) && (ret = data[i].replace(re,'$1|$2'))) {
console.log("line matched:" + data[i]);
console.log("return string:" + ret);
ret = ret.split(/\|/g);
if (typeof ret !== 'undefined') {
console.log("date:" + ret[0], "\nyear:" + ret[1]);
}
else {
console.log("match but unable to parse capturing parentheses");
}
}
}
最后一个条件有效,但你需要一个临时变量并将其拆分,你需要在前面进行测试,因为替换适用于所有事情。
输出是:
$ ./reg1.js
line matched:DATE: Feb 26,2015
return string:Feb 26|2015
date:Feb 26
year:2015
如果我抬头:mosdev regexp它在(x)上说:
可以从生成的数组中调用匹配的子字符串 元素1,...,[n]或来自预定义的RegExp对象 物业$ 1,...,$ 9。
如何掌握RegExp对象&#39; $ 1和$ 2?
由于
答案 0 :(得分:3)
MDN是学习Javascript的好资源。在这种特殊情况下,.match()
,.exec()
等都返回包含匹配信息的对象。那是你可以找到被捕获的团体的地方。
答案 1 :(得分:0)
感谢您的回答,他们返回了一个数组:,所以更简单的块看起来像这样:
if((ret = data[i].match(re))!=null) {
//match correctly, but how to get hold of the $1 and $2 ?
console.log("line matched:" + data[i]);
console.log("return string:" + ret[0] + "|" + ret[1]);
ret = null;
}
if((ret = re.exec(data[i]))!=null) {
//match correctly, how to get hold of the $1 and $2 ?
console.log("line matched:" + data[i]);
console.log("return string:" + ret[0] + "|" + ret[1]);
ret = null;
}
答案 2 :(得分:0)
使用JavaScript .test()和.match()这可能非常简单
一个例子:
var input = "DATE: Feb 26, 2015",
regex = /^DATE:\s*(.*),\s*(.*)$/;
if (regex.match(input)) {
console.log('Matches Format!');
//.match() needs splicing because .match() returns the actually selected stuff. It becomes weirder with //g
var results = input.match(regex).splice(0,1);
console.log(results);
//Logs: ["Feb 26", "2015"]
}
Regex101可能很有用