2013-03-19 3 views
3

У меня есть это регулярное выражение:Regex не работает должным образом?

new RegExp("^[a-z 0-9\"\-\`]+$", "ig") 

и я проверяю строку, которая не предполагают, чтобы работать: '#vc'

Но это не проходит тест: (и он не должен (#))

new RegExp("^[a-z 0-9\"\-\`]+$", "ig").test('#vc') //true 

Но если удалить либо \" или \- или \`, это работа (и тест не пройден, как и должно быть).

Что я делаю неправильно?

Моего регулярное выражение просто поиск для английского языка, цифры, пробел, [ "], [-] [и [`]

ответ

5

Если вы используете RegExp конструктор, необходимо скрючившись вылетающими, так как есть 2 слоя побега: побег в JavaScript строкового литерала и избежать в регулярных выражениях синтаксиса

Однако в вашем случае, можно написать регулярное выражение, не выделяющиеся при всех

в вашем случае, вы можете просто.. использование литерал RegExp, в которой вы должны только заботиться о побеге в регулярном выражении синтаксиса, и избежать любого /, который появляется в регулярном выражении (с / используются в качестве разделителя для буквального RegExp:

/^[a-z 0-9"\-`]+$/gi 

Другим способ:

/^[a-z 0-9"`-]+$/gi 

Вам не нужно избегать тире -, если он является последним в классе символов. Таким образом, вам не нужно путать себя со всеми побегами.

Или, если вы все еще хотите использовать RegExp конструктор, вы должны удвоить побег указать \ в строке:

new RegExp('^[a-z 0-9"\\-`]+$', "ig") 

Или просто использовать другую версию, где - указан последним в классе символов :

new RegExp('^[a-z 0-9"`-]+$', "ig") 

Обратите внимание, что я изменить строку цитаты из " в ', чтобы избежать того, чтобы избежать " в строке.Если вы по какой-то причине предпочитает ", бежать " в буквальном уровне строки:

new RegExp("^[a-z 0-9\"`-]+$", "ig") 

Что касается текущего регулярного выражения

new RegExp("^[a-z 0-9\"\-\`]+$", "ig") 

эквивалентно

/^[a-z 0-9"-`]+$/gi 

As вы можете увидеть диапазон символов от " - `, что означает, что все символы с кодом ASCII от 0x22 до 0x60 включены, а # находится в диапазоне.

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

+0

Не могу поверить, что я не смог с этим ...: -0 –

+0

, но посмотрите здесь http://i.stack.imgur.com/guafm.jpg it fu ** все (в визуальной студии) –

+0

так на самом деле \ "будет \\\" ...... grrrrrr –

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