days = /\b\d{2}\b/;
date = /\b\d{4}-\d{2}-\d{2}\b/;
2020-12-22应该与日期匹配,而不是天,但它匹配两者。
是否有可能使\ b不将-
视为单词边界?
答案 0 :(得分:2)
您当前的问题有几个问题。
是否可以将
\b
视为字边界?
在探索边界部分中查看有关字边界的this tchrist's answer。这就是它的工作原理,并且没有办法重新定义\b
行为。
2020-12-22应与日期匹配,而不是天,但它与两者都匹配。
为了匹配日期并避免将日期与days
正则表达式匹配,您需要lookbehind和lookahead - /\b(?<!-)\d{2}\b(?!-)/
- 但JavaScript正则表达式不支持lookbehind构造。您所能做的只是使用消费模式,它将匹配字符串的开头或任何字符,但连字符 - (?:^|[^-])
,并使用\d{2}
周围的捕获组来< em>将捕获到一个单独的组中。请注意,根据您的操作,您可能还需要在lookbehind变通方法模式中使用捕获组。
如果您打算提取,请使用
var days = /(?:^|[^-])\b(\d{2})\b(?!-)/g;
var s = "25 and 45 on 2017-04-14 and 2017-04-15.";
var res = [], m;
while ((m=days.exec(s)) !== null) {
res.push(m[1]);
}
console.log(res)
要替换它们,请使用
var days = /(^|[^-])\b(\d{2})\b(?!-)/g;
var s = "25 and 45 on 2017-04-14 and 2017-04-15.";
console.log(s.replace(days, "$1[TAG]$2[/TAG]"));