我试图捕捉字符串这样大胆部分:正则表达式嵌套可选组
“捕捉在字符串的结尾年份范围1995-2010”
'如果没有年份范围只是捕获单一年份'
'捕获年份/年份范围一个括号,包括括号2007-2012(58个月)'
此正则表达式适用于1和2,但我不能让它为3工作:
/(\d+([-–— ]\d+(\(\d+ months\))?)?$)/
我做错了什么?
我试图捕捉字符串这样大胆部分:正则表达式嵌套可选组
“捕捉在字符串的结尾年份范围1995-2010”
'如果没有年份范围只是捕获单一年份'
'捕获年份/年份范围一个括号,包括括号2007-2012(58个月)'
此正则表达式适用于1和2,但我不能让它为3工作:
/(\d+([-–— ]\d+(\(\d+ months\))?)?$)/
我做错了什么?
试试这个正则表达式:括号
/\d{4}(?:[-–— ]\d{4})?(?:\s*\([^)]+\))?$/gm
这一次抓住了一切。 如果您需要在括号中的正则表达式的具体文本“(数量)个月”,那么你可以使用这个:\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!");
}
感谢您的回答和解释。这就是我喜欢SO的原因。 – supertrue
以下正则表达式适用于示例Perl脚本。它应该在JavaScript中是可行的:
/(\d{4}([-–— ]\d{4})?(\(\d+ months\))?)$/
\d{4}
([-–— ]\d{4})?
(\(\d+ months\))?
您可能需要插入空白匹配(\s*
)在需要的地方,如果你的数据不ALW ays遵循这个严格的模板。
年份范围可以有以下分隔符之一:[---]由OP的正则表达式提供。这个不包括那个。 – Kash
糟糕...你是对的!我会修改它... –
如果我正确理解你的需求,它实际上可以正常工作:Gskinner RegExr 只是替换最后一个句子,因为$不会计入换行符,只是字符串的末尾。
您的字符串是否总是包含在'''中?我的意思是,是否是字符串的一部分? – Aust
你正在使用什么特定的正则表达式工具? – Glenn
@如果'''不是字符串的一部分。 @Glenn我在javascript'.replace()'的上下文中使用它。 – supertrue