2015-08-20 4 views
2

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

! % & \ ' () * + - ./; <=> ? \\ , : # @ \t \r \n " [] _

Я пытался моей замены функции как это, но я столкнулся с проблемой с символами, как //, \t, \r, \n и []

var input = 'test ! % & \ ' () * + - ./; <=> ? \\ , : # @ \t \r \n " [] _ test'; 
input.replace(/[!%&\'()*+-./;<=>?\\,:#@\t\r\n"[]_][\u007B-\u00BF]/g, ""); 

есть ли лучший ва y правильно это сделать? Или можно каким-то образом использовать массив как ограниченные символы?

+2

'* столкнулся с проблемой * И какими неприятностями это будет, точно? Может ли это быть неубежденным '' '? Или бит '+ -.' – Biffen

+0

Действительно ли '[]' действительно один символ, или есть пробел в вашем списке? – Xufox

+0

Возможно, это лучший подход для поиска того, что _can_ останется в строке и удалить что-нибудь еще. Например. если вы хотите оставить пробелы и цифры букв, вы будете искать что угодно, кроме буквы, числа или пробела: '[^ \ w \ d]'. – marekful

ответ

1

Вот регулярное выражение можно использовать:

var input = 'test ! % & \\ \' () * + - ./; <=> ? \\ , : # @ \t \r \n " [] _ test'; 
 
alert(input.replace(/[!%&'()*+./;<=>?\\,/:#@\t\r\n"\[\]_\u007B-\u00BF-]/g, ""));

Примечание вам нужно бежать [ и ] в классе регулярных выражений символов JS. И дефис должен быть либо помещен в конце, либо экранирован. Кроме того, я думаю, вы также хотите удалить символы в диапазоне \u007B-\u00BF, поэтому я «объединил» классы с двумя символами в 1.

+0

Спасибо, ускользнув от этих персонажей, похоже, сработало. Я сохранил символы диапазона в другом классе, просто для удобства чтения. (Так как есть больше диапазонов) – liquid5109

+0

@ liquid5109 Сохранение их в другом классе делает регулярное выражение совсем другим. То есть один символ из первого класса *, за которым следует * один из второго класса. – Biffen

+0

Несомненно, но в этом случае ясно, что кодовые обозначения обозначают «специальные» символы, которые, скорее всего, должны быть удалены из входной строки (судя по требованию вопроса). –

0

Certain characters need to be escaped с обратной косой чертой.

Эти символы .^$*+?()[{\|-

Кроме того, необходимо, чтобы избежать /, как вы используете Js буквальным.

Кроме того, имея в конце [\u007B-\u00BF], он будет соответствовать только символам, за которыми следует один из этих символов. Из вашего вопроса неясно, действительно ли это то, что вы хотите.

Так что ваше регулярное выражение должны быть:

input.replace(/[!%&'\(\)\*\+\-\.\/;<=>\?\\,:#@\t\r\n"\[\]_][\u007B-\u00BF]/g, ""); 

Here is an example первой части

-2
var re = /[a-z()!%$\\@<>=?\/.-;,#\[\]_\*\&\+\-\"]/g; 
var str = 'test ! % & \ \' () * + - ./; <=> ? \\ , : # @ \t \r \n " [] _ test'; 
var m; 

while ((m = re.exec(str)) !== null) { 
    if (m.index === re.lastIndex) { 
     re.lastIndex++; 
    } 
    // View your result using the m-variable. 
    // eg m[0] etc. 
} 
Смежные вопросы