2012-11-06 2 views
1

В поисках лучшего понимания JavaScript/OOP, мне любопытно, как параметры аргумента регулярного выражения обрабатываются в JavaScript. Я уже много разбираюсь в регулярных выражениях, поэтому речь идет не о интерпретации шаблонов. Это касается определения того, как работает JavaScript.Объекты JavaScript: Как проходят объекты регулярного выражения?

Пример:

newStr = str.replace(/(^\W*|\W*$)/gi,''); 

В основном это отсекает любые специальные символы и пробельных из строки. Однако /(^\W*|\W*$)/giне инкапсулированная строка, поэтому она меня озадачивает, чтобы понять эту концепцию, поскольку объект JS не является строкой и не числом. Является ли этот тип объекта только (т. Е. Только для регулярного выражения) или он служит другим целям?

+0

Спасибо всем за ваши быстрые ответы! Все ваши ответы хороши! – Jonathan

ответ

6

Это просто специальный синтаксис , который JavaScript имеет для регулярных выражений. Он оценивает на объект, и не отличается:

var rex = /(^\W*|\W*$)/gi; 
decision = str.replace(rex, ''); 

Или:

var rex = new RegExp('^\\W*|\\W*$', 'gi'); 

The RegExp MDN documentation имеет много подробной информации.

+0

Упс :) – josh3736

3

Regexes являются первоклассными гражданами в JavaScript, т.е. е. они представляют собой отдельный тип объекта.

Вы можете создать новый объект RegExp используя его стандартный конструктор:

var regex = new RegExp("(^\\W*|\\W*$)", "gi"); 

или с помощью специального «регулярное выражение буквального» обозначение, которое позволяет сократить на обратной косой черты:

var regex = /(^\W*|\W*$)/gi; 
2

/(^\W*|\W*$)/gi является a regular expression literal, который является типом объекта в JavaScript. Этот тип может быть передан как первый параметр в метод replace, который принимает либо регулярное выражение, либо подстроку.

2

Является ли это само по себе тип-объекта (то есть, регулярное выражение только)

Это правильно. RegExp object s - особый тип значения, встроенный в язык. Они являются одним из немногих типов, которые имеют «буквальные» представления в JavaScript.

Это делает их довольно уникальными; в языке нет других специальных литератур.Другие литералы являются обобщенные типы, как:

  • null
  • булевых значений (true/false)
  • чисел (1.0, 2e3, -5)
  • строк ('hello', "goodbye")
  • Array сек ([1, 2, 3])
  • Object s ({ name: "Bob", age: 18 })
1

Чтобы добавить к людям, говоря в основном то же самое:

На вершине того, что это буквальное со своим собственным синтаксисом, вы можете получить доступ к его методам в буквальном виде :

/bob/gi.exec(" My name is Bob "); 

... так долго, как браузер вы используете достаточно молод, чтобы действительно поддерживать RegEx литералы (это довольно трудно найти тот, который не делает, в эти дни, и если вы делаете, делает то браузер поддерживает CSS?).

Смежные вопросы