2015-02-21 2 views
0

У меня есть это PHP регулярное выражение для utf8 удалить специальные символы из строки:Преобразование PHP RegEx в Javascript

[\x00-\x1F]|\xC2[\x80-\x9F]|\xE2[\x80-\x8F]{2}|\xE2\x80[\xA4-\xA8]|\xE2\x81[\x9F-\xAF] 

Мне нужно, чтобы преобразовать его в Javascript регулярных выражений. I судимого этот код:

str = str.replace(/[\x00-\x1F]|\xC2[\x80-\x9F]|\xE2[\x80-\x8F]{2}|\xE2\x80[\xA4-\xA8]|\xE2\x81[\x9F-\xAF]/g, ''); 

Но он ничего не делает.

Мне нужна ваша помощь. Спасибо.

ответ

0

Попробуйте это:

str = str.replace(/[\x00-\x1F]|\xC2[\x80-\x9F]|\xE2[\x80-\x8F]{2}|\xE2\x80[\xA4-\xA8]|\xE2\x81[\x9F-\xAF]/gi, ''); 
+0

Он ничего не делает .. –

3

Простая ошибка, большой эффект:

strTest = strTest.replace(/your regex here/g, "$1"); 
// ----------------------------------------^ 

без "глобального" флаг, то заменить происходит только в первом матче.

Side Примечание: Для того, чтобы удалить какой-либо символ, который не выполняет какое-то сложное состояние, как падение в набор определенного символа Unicode диапазонов, вы можете использовать отрицательный предпросмотр:

var regex = /(?![\x00-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3})./g; 
strTest = strTest.replace(regex, "") 

где regex читает как

 
(?!  # negative look-ahead: a position *not followed by*: 
    […] # any allowed character range from above 
)  # end lookahead 
.  # match this character (only if previous condition is met!) 
Смежные вопросы