Javascript 这个RegExp字符串需要转义吗?

Javascript 这个RegExp字符串需要转义吗?,javascript,regex,Javascript,Regex,我试图使用一个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

我试图使用一个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');   
    }
const DOCS=[
“我的报告——2019年3月.pdf”,
“我的报告——2019年5月.pdf”,
“我的日记-2019年4月-5月.pdf”,
“我的日记-2019年2月至3月.pdf”
]
const title|u month|u year=新的RegExp((*)-(一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)(19 | 20{2})
forEach博士(
mag=mag.替换(/–/g,“-”);

//如果(title\u month\u year.test(mag)){正如第四只鸟已经指出的那样,您正在使用一种不同类型的催眠。 您可以做的是调整您的正则表达式,使其包含两种类型的催眠:
const title|u month|u year=new RegExp((.*)(-)(一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十二月|)(19 | 20{2})

请注意,在解决方案中,您的分组值将在第一个条目后关闭1(因此,您现在有4个元素,而不是3个元素,第一个是hypen前面的任何元素,第二个是hypen类型,第三个是月份,第四个是年份)

或者只是寻找一个角色而不是宣传:
const title_month_year=new RegExp((.*)。(一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)(19 | 20{d{2})
你忘了逃出这个月{2}


它应该是\\d{2}在一个RegExp字符串中。

您使用的是另一种hypen
-
vs
-
很好地抓住了@Thefourthbird-mdash vs ndashOK,我想我应该得到-1,因为我没有在粘贴的文本中包含更多的代码,但是m-dash修复出现在jsbin中,并且那里的代码仍然不匹配。但是现在确切的问题是什么呢因为没有转义,\d,所以得到了零个匹配项。得到了我的答案-谢谢!谢谢-看到了一两个我可以使用的正则表达式技巧!实际脚本需要处理5-6个日期格式,因此我被迫使用更简单的正则表达式逐个处理每种格式。如果没有固定格式(1-2个月连接),你只能抓住这根弦,敞开你的心扉
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)