2013-04-05 4 views
2

Я пытаюсь использовать функцию замены javascript для замены строки. Но он просто заменяет первый экземпляр. Поэтому, когда я использую регулярные глобальные выражения,Функция замены Javascript с использованием регулярных выражений

var result = 'moaning|yes you|hello test|mission control|com on'.replace(/|/g, ';'); 

я получаю: http://jsfiddle.net/m8UuD/196/

Я хочу получить:

стоны, да вы, привет тест, управления полетом, ком на

ответ

3
var result = 'moaning|yes you|hello test|mission control|com on'.replace(/\|/g, ';'); 
+0

спасибо, что работает. Нет ответа на голосование. –

2

Вы можете также использовать .split() и .join():

'moaning|yes you|hello test|mission control|com on'.split('|').join(';') 
+1

Это, наверное, немой вопрос в этом контексте, но знаете ли вы о каких-либо «проблемах производительности» между этим и «заменять» на Regex? Я знаю, что и это, и замена будут эффективно делать то же самое, мне просто интересно. Разве это «интенсивное» разделение, а затем соединение? Особенно по сравнению с использованием Regex? Я уверен, что в любом случае это не так важно, поскольку это небольшая строка и выполняется только один раз, но я просто подумал, что попрошу – Ian

+0

@Ian: split/join кажется немного быстрее, по крайней мере, в Chrome: http://jsperf.com/split-join-vs-regex2, но не намного – Blender

+0

Спасибо за предоставление этого. Я должен был просто сделать это сам. Конечно, в Firefox я получаю противоположные результаты :) Думаю, мне было интересно, знаете ли вы что-то вроде «Ну, регулярное выражение компилируется заранее, поэтому оно может выполняться быстрее» или что-то в этом роде. И я также задаюсь вопросом, существует ли отношение к размеру строки. По какой-то причине я чувствую, что split/join не так хорош, как размер строки увеличивается. – Ian

1

Многие символы зарезервированы потому, что имеют особое значение в регулярном выражении, так, чтобы использовать один из них, нужно «сбежать», поместив обратную косую черту \ прямо перед специальным символом. К ним относятся:

( start of a sub-expression 
) end of a sub-expression 
{ start of repetition range 
} end of a repetition range 
[ start of a character set 
] end of a character set 
+ one or more repetitions 
* zero or more repetitions 
^ start of string 
$ end of string 
| "or" connection between alternatives 
\ start of special code or escape 
/ start or end of regexp pattern 

Например регулярно exprerssion, чтобы соответствовать всем открытым скобка является /\[/ (обратите внимание на обратную косую черту). Если вам нужно искать обратную косую черту, вам нужно только обратную косую черту перед ней (так удваивая ее).

К сожалению, нет предопределенной функции Javascript для «экранирования» всех специальных символов.