Удалите из строки не буквенно-цифровые символы. Возникли проблемы с символом [\]
Я хочу преобразовать следующую строку в предоставленный вывод.
Input: "\\test\red\bob\fred\new"
Output: "testredbobfrednew"
Я не нашел решения, которое будет обрабатывать специальные символы, такие как \r
, \n
, \b
и т.д.
В принципе, я просто хочу избавиться от всего, что не является буквенно-цифровым. Вот что я пробовал...
Attempt 1: "\\test\red\bob\fred\new".replace(/[_\W]+/g, "");
Output 1: "testedobredew"
Attempt 2: "\\test\red\bob\fred\new".replace(/['`[email protected]#$%^&*()_|+-=?;:'",.<>\{\}\[\]\\\/]/gi, "");
Output 2: "testedobred [newline] ew"
Attempt 3: "\\test\red\bob\fred\new".replace(/[^a-zA-Z0-9]/, "");
Output 3: "testedobred [newline] ew"
Attempt 4: "\\test\red\bob\fred\new".replace(/[^a-z0-9\s]/gi, '');
Output 4: "testedobred [newline] ew"
Еще одна попытка с несколькими шагами
function cleanID(id) {
id = id.toUpperCase();
id = id.replace( /\t/ , "T");
id = id.replace( /\n/ , "N");
id = id.replace( /\r/ , "R");
id = id.replace( /\b/ , "B");
id = id.replace( /\f/ , "F");
return id.replace( /[^a-zA-Z0-9]/ , "");
}
с результатами
Attempt 1: cleanID("\\test\red\bob\fred\new");
Output 1: "BTESTREDOBFREDNEW"
Любая помощь будет оценена.
Рабочее решение:
Final Attempt 1: return JSON.stringify("\\test\red\bob\fred\new").replace( /\W/g , '');
Output 1: "testredbobfrednew"
Ответы
Ответ 1
Удаление не-буквенно-цифровых символов
Ниже приведено правильное регулярное выражение для правильного выражения не буквенно-цифровых символов из входной строки:
input.replace(/\W/g, '')
Обратите внимание, что \W
является эквивалентом [^0-9a-zA-Z_]
- он включает символ подчеркивания. Чтобы также удалить символы подчеркивания, используйте, например:
input.replace(/[^0-9a-z]/gi, '')
Вход неправильный
Поскольку тестовая строка содержит различные экранированные символы, которые не являются алфавитно-цифровыми, они удаляют их.
Обратная косая черта в строке нуждается в экранировании, если это нужно сделать буквально:
"\\test\\red\\bob\\fred\\new".replace(/\W/g, '')
"testredbobfrednew" // output
Обработка неверных строк
Если вы не можете избежать ввода строки правильно (почему бы и нет?), или она исходит из какого-то ненадежного/неправильно сконфигурированного источника - вы можете сделать что-то вроде этого:
JSON.stringify("\\test\red\bob\fred\new").replace(/\W/g, '')
"testredbobfrednew" // output
Обратите внимание, что json-представление строки содержит кавычки:
JSON.stringify("\\test\red\bob\fred\new")
""\\test\red\bob\fred\new""
Но они также удаляются с помощью регулярного выражения замены.
Ответ 2
У всех текущих ответов все еще есть причуды, лучшее, что я мог придумать, было:
string.replace(/[^A-Za-z0-9]/g, '');
Вот пример, который фиксирует каждый ключ, который я могу найти на клавиатуре:
var string = '123abcABC-_*([email protected]#$%^&*()_-={}[]:\"<>,.?/~`';
var stripped = string.replace(/[^A-Za-z0-9]/g, '');
console.log(stripped);
Выходы: '123abcABC'
Ответ 3
Проблема не в том, как вы заменяете символы, проблема в том, как вы вводите строку.
Это только первая обратная косая черта во вводе, которая является символом обратной косой черты, остальные являются частью управляющих символов \r
, \b
, \f
и \n
.
Поскольку эти обратные косые черты не являются отдельными символами, а частью обозначений для записи отдельных управляющих символов, их нельзя удалить отдельно. То есть вы не можете удалить обратную косую черту с \n
, так как это не два отдельных символа, это то, как вы пишете управляющий символ LF
или строку.
Если вы действительно хотите превратить этот вход в нужный вывод, вам нужно будет заменить каждый символ управления соответствующей буквой, например. замените символ \n
символом n
.
Чтобы заменить управляющий символ, вам нужно использовать набор символов, например [\r]
, поскольку \r
имеет особое значение в регулярном выражении:
var input = "\\test\red\bob\fred\new";
var output = input
.replace(/[\r]/g, 'r')
.replace(/[\b]/g, 'b')
.replace(/[\f]/g, 'f')
.replace(/[\n]/g, 'n')
.replace(/\\/g, '');
Демо: http://jsfiddle.net/SAp4W/
Ответ 4
вы можете попробовать это регулярное выражение:
value.replace(/[\W_-]/g, '');
Ответ 5
Если вы хотите иметь эту строку \\test\red\bob\fred\new
, вам следует избегать всех обратных косых черт (\
). Когда вы пишете \\test\\red\\bob\\fred\\new
, ваша строка фактически содержит одну обратную косую черту. Вы можете быть уверены, что это напечатает вашу строку.
Поэтому, если обратные косые черты в вашей строке экранированы, myString.replace(/\W/g,'')
будет работать нормально.