Расширенное руководство по регулярным выражениям JavaScript

внешний интерфейс JavaScript RabbitMQ регулярное выражение

Резюме:Регулярные выражения — важный навык для программиста. Хотите узнать больше?

В этой статье используется JavaScriptexecметод проверки регулярных выражений.

Например, регулярные выражения/F.*g/будет соответствовать «строкам, начинающимся с F и заканчивающимся на g», поэтому он соответствует «Hello, Fundebug!»Fundebug, метод exec возвращает массив, первым элементом которого является совпадающая подстрока.

/F.*g/.exec("Hello, Fundebug!")[0]
// 'Fundebug'

нежадный матч

По умолчанию квантификаторы регулярных выражений ***, +, ? , {}, все являются жадным сопоставлением, т.е.Сопоставьте как можно больше символов**.

Например, регулярные выражения/.+\s/Сопоставляя «Строка, оканчивающаяся пробелами», мы используем ее, чтобы сопоставить знаменитую фразу основателя Apple Джобса в Стэнфордском университете «Ваше время ограничено, поэтому не тратьте его впустую, живя чужой жизнью».:

/.+\s/.exec("You time is limited, so don’t waste it living someone else’s life.")[0]
// 'You time is limited, so don’t waste it living someone else’s '

.может соответствовать любому символу, а+Указывает, что он соответствует 1 или более раз и является жадным, поэтому/.+\s/Он не закончится, пока не будет найден последний пробел.

когда мы проводим количественную оценку、+、?、{}за которым следует?Не жадные сопоставление могут быть достигнуты, а именносоответствовать как можно меньшему количеству символов.

Например, регулярные выражения/.+?\s/Он заканчивается, когда совпадает первый символ пробела:

/.+?\s/.exec("You time is limited, so don’t waste it living someone else’s life.")[0]
// 'You '

положительный положительный поиск

Используйте регулярные выраженияx(?=y),Могусоответствует 'x', только если за 'x' следует 'y'. Это немного сбивает с толку, проще говоря, этосоответствует x, за которым следует y, где x и y представляют собой регулярные выражения.

Например, для блоговРуководство по началу работы с RabbitMQадрес "ошибка blog.fun.com/2018/04/20/…", если вам нужно сопоставить имя домена fundebug, вы можете использовать/[a-z]+(?=\.com)/, что соответствует "английскому слову перед .com"

/[a-z]+(?=\.com)/.exec("https://blog.fundebug.com/2018/04/20/rabbitmq_tutorial/")[0]
// 'fundebug'

Реклама: Добро пожаловать в бесплатную пробную версиюFundebug, чтобы вы могли отслеживать ОШИБКИ онлайн-кода и улучшать взаимодействие с пользователем ~

Прямой отрицательный поиск

Положительному положительному поиску соответствует положительный отрицательный поиск с использованием регулярных выражений.x(?!y)Быть «Соответствовать 'x', только если 'x' не следует за 'y'».

Например, отношение числа пи, известное учащимся начальной школы, равно3.1415926, студенты, которые не знают, могут написать так «на вершине горы стоит храм, в храме есть горшок с вином и кусок мяса». Как сопоставить числа после запятой? можно использовать/\d+(?!\\.)/, что соответствует «числам без десятичной точки»:

/\d+(?!\.)/.exec("3.1415926")[0]
// '1415926'

А используя упомянутый ранее прямой положительный поиск, вы можете сопоставить цифры до десятичной точки:

/\d+(?=\.)/.exec("3.1415926")[0]
// '3'

многострочное совпадение

Вот текст песни Боба Дилана «Forever Young»:

May God bless and keep you always,
may your wishes all come true,
may you always do for others
and let others do for you.
may you build a ladder to the stars
and climb on every rung,
may you stay forever young,
forever young, forever young,
May you stay forever young.

Как соответствовать лирике «Вечно молодой, вечно молодой», которая начинается с «Вечно»?

напиши вот так/^forever.+/это не правильно:

/^forever.+/.exec("May God bless and keep you always,\nmay your wishes all come true,\nmay you always do for others\nand let others do for you.\nmay you build a ladder to the stars\nand climb on every rung,\nmay you stay forever young,\nforever young, forever young,\nMay you stay forever young.")
// null

Почему это неправильно? потому что^Соответствует началу всей строки, а не началу каждой строки.

спецификация регулярного выраженияmвариант, вы можете поддерживать многострочное сопоставление, затем^а также$Совпадает начало и конец каждой строки, поэтому правильным регулярным выражением будет **/^forever.+/m**:

/^forever.+/m.exec("May God bless and keep you always,\nmay your wishes all come true,\nmay you always do for others\nand let others do for you.\nmay you build a ladder to the stars\nand climb on every rung,\nmay you stay forever young,\nforever young, forever young,\nMay you stay forever young.")[0]
// 'forever young, forever young,'

захват скобок

Используйте круглые скобки () в регулярных выражениях для извлечения определенных подстрок в строке.

Например,FundebugЭто Дабл 11 в 2016 годуОфициально запущенДа, время "2016-11-11", как извлечь год, месяц и день? следующим образом:

/(\d{4})-(\d{2})-(\d{2})/.exec("2016-11-11")
// [ '2016-11-11', '2016', '11', '11', index: 0, input: '2016-11-11' ]

Можно видеть, что регулярные выражения в трех скобках соответствуют году, месяцу и дню соответственно, а результатом являются элементы с 1 по 3 в массиве, возвращаемом exec.

Ссылаться на

О Фундебаге

FundebugСосредоточьтесь на JavaScript, апплете WeChat, мини-игре WeChat, апплете Alipay, React Native, Node.js и мониторинге ошибок онлайн-приложений Java в режиме реального времени. С момента официального запуска Double Eleven в 2016 году Fundebug обработал в общей сложности более 1 миллиарда ошибок, а платными клиентами являются Google, 360, Kingsoft, People.com и многие другие бренды. приветствую всехБесплатная пробная версия!

Уведомление об авторских правах

Пожалуйста, указывайте автора при перепечаткеFundebugИ адрес этой статьи:
ошибка blog.fun.com/2018/05/02/…