我有以下代码:
var splitter = (filterValue.length > 0 ? filterValue.match(/^\s*(<|>)?\s*(\d\d\/\d\d\/\d{4})\s*\-?\s*(\d\d\/\d\d\/\d{4})?\s*$/).slice(1) : '');
filterValue
可能是:
01/01/2013
> 01/01/2013
< 01/01/2013
01/01/2013 - 01/01/2013
然后我把它们分成几块:
var string1 = (splitter.length > 0 ? splitter[0] : '');
var string2 = (splitter.length >= 2 ? splitter[1] : '');
var string3 = (splitter.length >= 3 ? splitter[2] : '');
var string4 = (splitter.length < 4 ? splitter[3] : '');
对于上述示例, string1
可能是'', '>', '<', ''
。
string2
永远是第一个日期
string3
可以是''
或'-'
string4
将是最后一次约会。
但是我无法让最后一个场景奏效。所以假设我的正则表达式中有一个问题来处理这个问题。有谁能看到这个问题?
小提琴:http://jsfiddle.net/7LR49/1/
我得到了:
undefined
01/01/2013
01/01/2013
undefined
当我应该得到:
undefined
01/01/2013
-
01/01/2013
并在拆分器上执行控制台显示:
[undefined, "01/01/2013", "01/01/2013"]
所以最后一个第三个键并没有被正则表达式实际拾取。而取而代之的是第四位。
答案 0 :(得分:2)
一些修复:
来自:/^\s*(<|>)?\s*(\d\d\/\d\d\/\d{4})\s*\-?\s*(\d\d\/\d\d\/\d{4})?\s*$/
至......:/^\s*(<|>)?\s*(\d\d\/\d\d\/\d{4})\s*(\-)?\s*(\d\d\/\d\d\/\d{4})?\s*$/
已更改:.................................^..^
true
所以你会忽略最后一组的价值:来自:var string4 = (splitter.length < 4 ? splitter[3] : '');
至......:var string4 = (splitter.length < 5 ? splitter[3] : '');
已更改:..............................^
立即输出:
undefined
01/01/2013
-
01/01/2013
你的小提琴,更新:http://jsfiddle.net/7LR49/2/
答案 1 :(得分:0)
以下适用于我:
function getMatches(string, regex, index) {
index || (index = 1); // default to the first capturing group
var matches = [];
var match;
while (match = regex.exec(string)) {
matches.push(match[index]);
}
return matches;
}
var str = "> 01/01/2013 - 02/01/2013";
var regex = /\b(\d\d\/\d\d\/\d\d\d\d)\b/g;
var matches = getMatches(str, regex, 1);
alert(matches[0]);
alert(matches[1]);
<强>输出:强>
01/01/2013
02/01/2013
该方法取自here