首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >这个RegExp字符串需要转义吗?

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

Stack Overflow用户
提问于 2019-05-29 02:52:06
回答 3查看 48关注 0票数 -1

我试图使用一个RegExp,这样我就可以在以后插入一个字符串变量。但是,即使是第一次没有该变量的尝试也不会起作用。遗漏了什么?

有一个很好的jsbin链接,它显示了行为。

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-29 03:18:23

您忘记转义\d{2}

它应该在RegExp字符串内\d{2}。

票数 0
EN

Stack Overflow用户

发布于 2019-05-30 19:07:43

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 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})")

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56348453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档