Создать динамическое Rege во время выполнения - PullRequest
0 голосов
/ 10 августа 2011

Друзья, возможно создание динамического регулярного выражения javascript во время выполнения. я создаю это регулярное выражение:

[+]?\(?800\)?[+ .]?123?[+ .]?1234

для этого номера 800.123.1234. Это регулярное выражение может найти / принять этот номер на странице в любом формате как:

(800).123.1234
+(800)1231234
+(800)1231234
(800).123.1234
800.123.1234
800.123.1234

Работает нормально, но мне нужно создать динамический rejex, зависит от числа, которое я передаю в поле ввода текста. Вот мой пример рабочего кода: http://jsfiddle.net/webdesignerart/ShbMv/

означает, что если у меня есть два числа на странице 800.123.1234 и 855.455.4577 я добавляю этот номер 855.455.4577 в поле ввода текста тогда регулярное выражение должно создать динамический или разобрать

[+]?\(?800\)?[+ .]?123?[+ .]?1234

в этом регулярном выражении, чтобы найти это 855.455.4577.

Ответы [ 2 ]

1 голос
/ 10 августа 2011

Вы можете создать свой собственный объект регулярного выражения в любое время, используя синтаксис new RegExp(str).

var str = "[+]?\\(?800\\)?[+ .]?123?[+ .]?1234";
var re = new RegExp(str);
re.exec("800.123.1234");

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

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

\+?\(?\d\d\d\)?\.?\d\d\d\.?\d\d\d\d

zero or one plus sign
zero or one left paren
3 digits
zero or one right paren
zero or one period
three digits
zero or one period
four digits

Вот jsFiddle, который проверяет все ваши тестовые числа на соответствие регулярному выражению и извлекает только числа из каждой формы для создания нормализованной формы номера телефона: http://jsfiddle.net/jfriend00/43mqV/. Используется это регулярное выражение:

\+?\(?(\d\d\d)\)?\.?(\d\d\d)\.?(\d\d\d\d)

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

0 голосов
/ 10 августа 2011

Используйте \ d где для цифр, которые могут быть любые от 0 до 9.

...