我试图像这样捕捉字符串的粗体部分:
'在字符串末尾捕获年份范围 1995-2010 '
'如果没有年份范围只捕获一年 2005 '
- 醇>
'捕获年/年范围,后跟括号,包括括号 2007-2012(58个月)'
这个正则表达式适用于1和2,但我不能让它适用于3:
/(\d+([-–— ]\d+( \(\d+ months\))?)?$)/
我做错了什么?
答案 0 :(得分:2)
这个正则表达式很好用。 :)
/(?:(?:\d{4}[-–— ])?\d{4})(?: \(\d+ months\))?$/
我的Regex和Jonah之间的主要区别在于我的包含?:
,这意味着不捕获子组。当您在Regex中进行分组时,它会自动返回该组中的内容,除非您不告诉它,并且我发现有时在使用replace
或split
等方法时捕获这些组时,这可能是一个小问题也可能是你的问题。
答案 1 :(得分:2)
试试这个正则表达式:
/\d{4}(?:[-–— ]\d{4})?(?:\s*\([^)]+\))?$/gm
这个捕获括号中的所有内容。
如果您需要特定于括号中“(number)months”文本的正则表达式,那么您可以使用:\d{4}(?:[-–— ]\d{4})?(?:\s+\(\d+\smonths\))?$
示例文字:
JavaScript代码:
var regex = /\d{4}(?:[-–— ]\d{4})?(?:\s*\([^)]+\))?$/gm; //multiline enabled
var input = "your input string";
if(regex.test(input)) {
var matches = input.match(regex);
for(var match in matches) {
alert(matches[match]);
}
} else {
alert("No matches found!");
}
答案 2 :(得分:1)
以下正则表达式适用于Perl脚本示例。它应该可以在JavaScript中使用:
/(\d{4}([-–— ]\d{4})?( \(\d+ months\))?)$/
\d{4}
([-–— ]\d{4})?
( \(\d+ months\))?
如果您的数据并不总是遵循此严格模板,则可能需要在需要的位置插入空格匹配(\s*
)。
答案 3 :(得分:0)
如果我正确理解您的需求,它在这里工作正常:Gskinner RegExr 只是替换哪个句子是最后一个,因为$不会计算换行符,只是字符串的结尾。