Эта строка RegExp нуждается в экранировании? - PullRequest
0 голосов
/ 28 мая 2019

Я пытался использовать 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

Ответы [ 3 ]

1 голос
/ 30 мая 2019
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)
0 голосов
/ 28 мая 2019

Вы забыли сбежать от \ d {2}

это должно быть \\ d {2} внутри строки RegExp.

0 голосов
/ 28 мая 2019

Как уже указала четвертая птица, вы используете другой тип гипса. Что вы можете сделать, это настроить свое регулярное выражение так, чтобы оно включало оба типа гипсов: const title_month_year = new RegExp("(.*) (-|–) (January|February|March|April|May|June|July|August|September|October|November|December) (19|20\d{2})")

Обратите внимание, что при решении ваши групповые значения будут отключены на единицу после первой записи (поэтому вместо 3 элементов у вас теперь есть 4, первый из которых находится перед гипсом, второй - тип гипса, третий - месяц, а четвертый - год.

Или просто искать персонажа вместо гипена: const title_month_year = new RegExp("(.*) . (January|February|March|April|May|June|July|August|September|October|November|December) (19|20\d{2})")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...