2013-11-27 3 views
0

У меня есть следующий код, который заменяет текст из Microsoft Word соответствующими символами.Ошибка замены JavaScript с помощью «вертикальной полосы»

message = message.replace(/[\u2018|\u2019|\u201A]/g, "\'"); // smart single quotes and apostrophe 
message = message.replace(/[\u201C|\u201D|\u201E]/g, "\""); // smart double quotes 
message = message.replace(/\u2026/g, "..."); // ellipsis 
message = message.replace(/[\u2013|\u2014]/g, "-"); // dashes 
message = message.replace(/\u02C6/g, "^"); // circumflex 
message = message.replace(/\u2039/g, ""); // open angle bracket 
message = message.replace(/[\u02DC|\u00A0]/g, " "); // spaces 

Этот вопрос, он заменяет вертикальную черту например: | с апострофом.

Я предполагаю, что это потому, что у меня есть | в коде замены message.replace(/[\u201C|\u201D|\u201E]/g, "\""). Я предположил, что это похоже на OR, но, очевидно, нет.

Любая идея, как я могу улучшить этот код, так что | не заменен?

ответ

1

Ты ставишь свои \u символов в классе/группе символов [ ]. Это уже делает неявное ИЛИ для содержащихся символов. Вне классов символов, | есть ИЛИ, но внутри него буквально |.

Удаление | должно работать:

message.replace(/[\u201C\u201D\u201E]/g, "\"") 

В качестве альтернативы, вы можете взять их из класса символов, и держать |:

message.replace(/\u201C|\u201D|\u201E/g, "\"") 

Вы можете решить, что выглядит чище/легче read (если можно сказать, что о любом регулярном выражении). Существуют различия между этими двумя методами, если вы хотите выполнять другие виды соответствия, но для ваших целей они функционально эквивалентны.

1

Вам не нужны чередования (представленные | символов) внутри классов символов:

message = message.replace(/[\u2018\u2019\u201A]/g, "\'"); // smart single quotes and apostrophe 
message = message.replace(/[\u201C\u201D\u201E]/g, "\""); // smart double quotes 
message = message.replace(/\u2026/g, "..."); // ellipsis 
message = message.replace(/[\u2013\u2014]/g, "-"); // dashes 
message = message.replace(/\u02C6/g, "^"); // circumflex 
message = message.replace(/\u2039/g, ""); // open angle bracket 
message = message.replace(/[\u02DC\u00A0]/g, " "); // spaces 

Или использовать простые чередований вместо классов символов:

message = message.replace(/\u2018|\u2019|\u201A/g, "\'"); // smart single quotes and apostrophe 
message = message.replace(/\u201C|\u201D|\u201E/g, "\""); // smart double quotes 
message = message.replace(/\u2026/g, "..."); // ellipsis 
message = message.replace(/\u2013|\u2014/g, "-"); // dashes 
message = message.replace(/\u02C6/g, "^"); // circumflex 
message = message.replace(/\u2039/g, ""); // open angle bracket 
message = message.replace(/\u02DC|\u00A0/g, " "); // spaces 
Смежные вопросы