Цитировать литералы регулярных выражений в JavaScript? Почему бы и нет?
В этом ответе на вопрос и во многих других местах я вижу строки без кавычек в javascript.
Например:
var re = /\[media id="?(\d+)"?\]/gi;
Почему это не должно быть:
var re = '/\[media id="?(\d+)"?\]/gi';
Это какая-то особая обработка регулярных выражений, или любая строка может быть объявлена таким образом?
4 ответа
Это какая-то особая обработка регулярных выражений?
Да, регулярные выражения получают особую обработку. Как указывает MDN, существует встроенный тип регулярных выражений JavaScript с собственным синтаксисом для литералов.
или любая строка может быть объявлена таким образом?
Нет. Поскольку регулярные выражения являются объектами и не являются строками, если вы попытаетесь написать строку с литералом регулярного выражения, вы получите объект регулярного выражения, а не строку.
var re = /\[media id="?(\d+)"?\]/gi;
является литералом регулярного выражения, а не строкой.
Потому что в JavaScript Regex является встроенным типом, а не строковым шаблоном, который передается какому-то парсеру, например, в C# или Java.
Это означает, что когда вы пишете var regex = /pattern/
JavaScript автоматически использует этот литерал в качестве шаблона регулярного выражения, делая regex
объект RegExp
тип.
Смотрите: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions