我试图使用一个RegExp,这样我就可以在以后插入一个字符串变量。但是,即使是第一次没有该变量的尝试也不会起作用。遗漏了什么?
有一个很好的jsbin链接,它显示了行为。
const DOCS = [
"My Report – March 2019.pdf",
"My Report – May 2019.pdf",
"My Diary - April-May 2019.pdf",
"My Diary - February-March 2019.pdf"
]
const title_month_year = new RegExp("(.*) - (January|February|March|April|May|June|July|August|September|October|November|December) (19|20\d{2})")
DOCS.forEach(
mag = mag.replace(/–/g, "-");
// if (title_month_year.test(mag)) { <--- does not match
if (/(.*) - (January|February|March|April|May|June|July|August|September|October|November|December) (19|20\d{2})/.test(mag)) {
console.log('we have a match');
}
发布于 2019-05-29 03:18:23
您忘记转义\d{2}
它应该在RegExp字符串内\d{2}。
发布于 2019-05-30 19:07:43
const DOCS = [
"My Report – March 2019.pdf",
"My Report – May 2019.pdf",
"My Diary - April-May 2019.pdf",
"My Diary - February-March 2019.pdf"
]
const months = {
"January": "01",
"Jan": "01",
"February": "02",
"Feb": "02",
"March": "03",
"Mar": "03",
"April": "04",
"Apr": "04",
"May": "05",
"June": "06",
"Jun": "06",
"July": "07",
"Jul": "07",
"August": "08",
"Aug": "08",
"September": "09",
"Sep": "09",
"October": "10",
"Oct": "10",
"November": "11",
"Nov": "11",
"December": "12",
"Dec": "12"
}
let docsCopy = DOCS.map(m => {
var mReplace = m.replace(/^(.+)(?:\s[-–]\s)+(.+)\s(\d+)(.+)/, (match, p1, p2, p3, p4) => {
var p2C = p2.split('-').map(item=>{
return months[item]
}).join('-')
console.log(p2C)
return p1 + ' ' + p3 + '-' + p2C + p4
})
return mReplace
});
console.log(docsCopy)
发布于 2019-05-29 03:00:54
正如第四只鸟已经指出的那样,你使用的是一种不同类型的假设。您可以做的是调整正则表达式以包括两种类型的假设之一:const title_month_year = new RegExp("(.*) (-|–) (January|February|March|April|May|June|July|August|September|October|November|December) (19|20\d{2})")
请注意,使用解决方案,您的分组值将在第一个条目后减去1(因此,您现在有4个元素,第一个元素是假设之前的内容,第二个元素是假设类型,第三个元素是月份,第四个元素是年份。
或者仅仅寻找一个字符而不是推论:const title_month_year = new RegExp("(.*) . (January|February|March|April|May|June|July|August|September|October|November|December) (19|20\d{2})")
https://stackoverflow.com/questions/56348453
复制相似问题