2014-02-10 2 views
0

У меня есть следующий набор данных, в котором мне нужно найти и заменить все вхождения. Переменная может содержать либо один из примеров, либо несколько разделенных запятой до конца строки. Каждый из них представляет собой 10-значное число с /TYPE=PLMN в конце.Вставьте 1 после каждого +

настоящее время я использую правило, которое будет принимать 10-значный номер, который является номером телефона, так, например, используя только 10 числа 2 s

([\+]?)([5]?)(\d{10}.*) +1$3 

+2222222222/TYPE=PLMN 

и добавьте 1 после +

+12222222222/TYPE=PLMN 

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

+2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN 

Любые советы о том, как взять

+2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN 

и включить все экземпляры в

+12222222222/TYPE=PLMN, +12222222222/TYPE=PLMN, +12222222222/TYPE=PLMN,  +12222222222/TYPE=PLMN 

Такие, как для любого вхождения в строке + характера, без 1 после него для вставки 1 до конца строки.

+0

Используйте [* global * flag] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/global) в своем регулярном выражении – Bergi

ответ

0

Во-первых, ваше регулярное выражение имеет жадный характер: .* здесь:

([\+]?)([5]?)(\d{10}.*) 
        ^^ 

Это будет соответствовать все после первого матча, и что предотвратит любые другие матчи, так как совпадения не перекрываются. Поэтому, даже если у вас есть глобальный флаг, вы не получите ожидаемого результата с этим регулярным выражением. Просто удалите его, и я считаю, что это безопаснее, если вы используете /TYPE=PLMN, так как вы уже указали его.

Если вы хотите добавить 1 после +, за которым не следует другое 1, тогда вам придется использовать негативный взгляд.

/([\+]?)(?!1)([5]?)(\d{10})\/TYPE=PLMN/g, "+1$3" 
     ^^^^^ 

Но ваше регулярное выражение может быть улучшено. Вам не нужно избегать + в классе символов, и вы можете написать его как: \+?. То же самое для ([5]?), вы можете написать его как (5?):

/(\+?)(?!1)(5?)(\d{10})\/TYPE=PLMN/g, "+1$3" 

Это должно сделать это, я думаю.

Примечание: Если у вас есть номер, как: 51234567890, он будет преобразован в +11234567890 (сбросив 5 там Вот что происходит, если вы не поставите назад $2 и обратной ссылки я не уверен, если вы сделали это. добровольно, поэтому я только что упомянул об этом здесь).

2

Глобальные переключатель:

s='+2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN' 
r=s.replace(/\+/g, '+1'); 

//=> "+12222222222/TYPE=PLMN, +12222222222/TYPE=PLMN, +12222222222/TYPE=PLMN" 
Смежные вопросы