这个RegExp字符串是否需要一些转义?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (64)

我试图使用一个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');   
    }

https://jsbin.com/lomolew/edit?js,console

提问于
用户回答回答于

你忘了逃避\ d {2}

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

用户回答回答于

正如第四只鸟已经指出你正在使用不同类型的爆炸。你可以做的是调整你的正则表达式,包括两种类型的爆发: const title_month_year = new RegExp("(.*) (-|–) (January|February|March|April|May|June|July|August|September|October|November|December) (19|20\d{2})")

请注意,使用解决方案,您的分组值将在第一次输入后关闭一个(所以不是3个元素,现在有4个,第一个是在hypen前面的任何东西,第二个是hypen类型,第三个是这个月和第四个是一年。

或者只是寻找一个角色而不是寻找一个角色: const title_month_year = new RegExp("(.*) . (January|February|March|April|May|June|July|August|September|October|November|December) (19|20\d{2})")

扫码关注云+社区

领取腾讯云代金券