2016-06-23 2 views
3

Здравствуйте, мне нужно удалить все вхождения | из строки. Это то, что я делаю в данный моментзамена трубы в строке

var mystring = "this|is|a|test" 
console.log(mystring.replace(/|/g , ",")); 

Это дает мне этот результат:, т, ч, я, s, |, I, S, | а, |, т, е, с, т, Это не то, что я хочу. Почему это не работает?

Когда я пытаюсь выполнить следующее, оно работает для запятых.

var mystring = "this,is,a,test" 
console.log(mystring.replace(/,/g , ":")); 

Это дает мне ----> это: это: а: тест

Почему это не работает для OR и как я могу это исправить?

ответ

10

Escape | знак.

var mystring = "this|is|a|test" 
 
console.log(mystring.replace(/\|/g, ","));

+0

@AvinashPrabhakar Для обеспечения качества ответов продвинуты, чтобы помочь другим, это внимательное и лучшие практики чтобы принять ответ, который, как вам показалось, лучше всего работает. – Seth

+0

Я намереваюсь принять этот ответ, но мне придется подождать 10 минут, чтобы сделать это. –

+3

Не могу поверить, что трое других избили меня до удара –

3

Это потому, что символ трубы (|) интерпретируется как регулярное выражение-или.

Однако вы можете использовать символ трубы квадратные скобки, как [|]:

var mystring = "this|is|a|test" 
 
console.log(mystring.replace(/[|]/g , ","));

regex101 demo

Квадратные скобки обычно используются для записи последовательности символов, а (положительный) побочный эффект заключается в том, что большинство специальных символов интерпретируются буквально внутри среды с квадратной скобкой, как указано regex101 объяснение рядом с регулярным выражением:

  • [|] матча один символ в списке ниже
    • |буквальным характер |
1

Вы просто необходимость чтобы избежать |, поэтому, если вам это нужно, есть, а, тест, вам нужно сделать console.log(mystring.replace(/\|/g , ","));

1

| это особый характер, и должен быть экранирован \

var mystring = "this|is|a|test"; 
 
console.log(mystring.replace(/\|/g , ","));

1

символы труб должны быть экранированы

var mystring = "this|is|a|test" 
console.log(mystring.replace(/\|/g, ",")); 
0

Символ трубы является специальным символом. вам нужно использовать escape charcter.

console.log(mystring.replace(/\|/g , ",")); 
0

Вы должны избегать специальных символов, таких как «|» с обратной косой чертой. Попробуйте заменить вашу последнюю строку с этим:

console.log(mystring.replace(/\|/g , ",")); 

Я тестировал выше в Chrome, и это выглядит делать то, что вы пытаетесь сделать.

Смотрите следующие относительно специальных символов для получения более подробной информации о том, когда и как избежать специальных символов:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp

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