Общий ответ: используйте регулярное выражение, которое создает groups
, затем используйте replace
с обратными ссылками для форматирования вывода.
Например, используя ваш первый пример, используйте это регулярное выражение:
/(\d{3})(\d{3})(\d{4})/
Создается три группы: первые 3 числа, следующие 3 числа и последние 4 числа.
Теперь в формате используйте функцию string.replace
: со следующим шаблоном замены:
($1) $2-$3
Я добавлю скобки вокруг первой группы, добавлю пробел, затем вторую группу и, наконец, дефис и последнюю группу.
Как использовать:
Вы можете создать свою функцию formatPhone следующим образом:
function formatPhone(rawPhone)
{
return rawPhone.replace(/(\d{3})(\d{3})(\d{4})/, '($1) $2-$3');
}
Вы можете сделать то же самое с другими вашими шаблонами.
Редактировать :
Абсолютно общая мысль требует, чтобы вы передавали и свою строку, и шаблон регулярного выражения, и шаблон замены в свою функцию, например:
function format(rawString, regex, replacement)
{
return rawString.replace(regex, replacement);
}
, где регулярное выражение и замена должны следовать правилам, описанным выше.
Edit2 :
Я думаю, вы что-то здесь не так поняли.Давайте возьмем ваш первый пример:
format("\(\d{3}\) \d{3}-\d{4}", "1234567890");
Здесь регулярное выражение просто не соответствует !!!Короче говоря, вы не можете создать функцию, которая принимает регулярные выражения формата.Регулярные выражения сделаны для match
(и, возможно, replace
), как показано выше.