我試圖捕捉字符串這樣大膽部分:正則表達式嵌套可選組
「捕捉在字符串的結尾年份範圍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