2015-04-21 2 views
-1

Chapter 9 of Haverbeke's Eloquent Javascript содержит следующий регулярное выражение примера:Как выбрать между действующими регулярными выражениями - пример из красноречивого JavaScript, глава 9

console.log(
    "Hopper, Grace\nMcCarthy, John\nRitchie, Dennis" 
    .replace(/([\w ]+), ([\w ]+)/g, "$2 $1")); 

// OUTPUT: 
// → Grace Hopper 
// John McCarthy 
// Dennis Ritchie 

Однако, я не знаю, почему он использует квадратные скобки и почему он имеет место после \w. Следующие регулярные выражения, кажется, производят идентичный результат:

console.log(
    "Hopper, Grace\nMcCarthy, John\nRitchie, Dennis" 
    .replace(/([\w]+), ([\w]+)/g, "$2 $1"));  // Spaces removed. 

console.log(
    "Hopper, Grace\nMcCarthy, John\nRitchie, Dennis" 
    .replace(/(\w+), (\w+)/g, "$2 $1"));   // No brackets or spaces. 

JSFiddle HERE

Суммировать

  1. с точки зрения производительности и передовых методов, существуют ли различия между тремя регулярными выражения, приведенные выше?
  2. Если да, то какие?
  3. Если нет, как следует различать их при принятии решений по кодированию?

ответ

2

[\w ] позволяет использовать пробелы в именах, которые вы не видите из-за выборочных данных.

См. Это JSFiddle, где я добавил пробелы в первый набор данных, чтобы показать, как оригинал отличается.

В первой версии допускаются слова или пробелы. Версия 2 допускает использование символов слова или символов только в виде слов, поскольку в скобках только \w. Версия три позволяет использовать только символы слов.

Разница между двумя и тремя состоит в том, что два дают список допустимых символов, которые, как правило, содержат только одну запись, а версия три не дает список. Если бы мне пришлось угадать, я бы сказал, что дерево может работать лучше двух, но я точно не знаю.

Эксперт от developer.mozilla.org объяснения [] 's: набор

символов. Этот тип шаблона соответствует любому из символов в скобках, включая escape-последовательности. Специальные символы, такие как точка (.) И звездочка (*), не являются особенными внутри набора символов, поэтому им не нужно избегать. Вы можете указать диапазон символов, используя дефис, как иллюстрируют следующие примеры.

Узор [a-d], который выполняет ту же самую комбинацию, что и [abcd], соответствует «b» в «грудинке» и «c» в «городе». Шаблоны /[a-z.]+/ и /[\w.]+/ соответствуют всей строке "test.i.ng".

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