Удалите специальные символы и лишние пробелы и замените подчеркивание, используя метод замены
Я хочу удалить все специальные символы и пробелы из строки и заменить их подчеркиванием.
Строка
var str = "hello world & hello universe";
Теперь у меня есть это, которое заменяет только пробелы:
str.replace(/\s/g, "_");
В результате я получаю hello_world_&_hello_universe
, но я бы тоже хотел удалить специальные символы.
Я попробовал это str.replace(/[^a-zA-Z0-9]\s/g, "_")
, но это не помогает.
Ответы
Ответ 1
В вашем регулярном выражении [^a-zA-Z0-9]\s/g
указано соответствие любому символу, который не является числом или буквой, за которым следует пробел.
Удалите\s, и вы должны получить то, что вам нужно, если вы хотите использовать _ для каждого специального символа.
var newString = str.replace(/[^A-Z0-9]/ig, "_");
Это приведет к hello_world___hello_universe
Если вы хотите, чтобы это были одиночные символы подчеркивания, используйте символ + для соответствия нескольким
var newString = str.replace(/[^A-Z0-9]+/ig, "_");
Это приведет к hello_world_hello_universe
Ответ 2
Удалите \s
из вашего нового регулярного выражения, и он должен работать. Пробелы уже включены в "ничего, кроме буквенно-цифровых".
Обратите внимание, что после ]
вы можете добавить +
, чтобы не получить последовательности более одного подчеркивания. Вы также можете привязать к .replace(/^_+|_+$/g,'')
, чтобы обрезать подчеркивания в начале или конце строки.
Ответ 3
Не было предложено точно удалить акцент (только специальные символы), но мне нужно было.
Предлагаемые здесь решения работают, но они не убирают акцент: é, è и т.д.
Итак, перед выполнением решения epascarellos, вы также можете сделать:
var newString = "développeur & intégrateur";
newString = replaceAccents(newString);
newString = newString.replace(/[^A-Z0-9]+/ig, "_");
alert(newString);
/**
* Replaces all accented chars with regular ones
*/
function replaceAccents(str) {
// Verifies if the String has accents and replace them
if (str.search(/[\xC0-\xFF]/g) > -1) {
str = str
.replace(/[\xC0-\xC5]/g, "A")
.replace(/[\xC6]/g, "AE")
.replace(/[\xC7]/g, "C")
.replace(/[\xC8-\xCB]/g, "E")
.replace(/[\xCC-\xCF]/g, "I")
.replace(/[\xD0]/g, "D")
.replace(/[\xD1]/g, "N")
.replace(/[\xD2-\xD6\xD8]/g, "O")
.replace(/[\xD9-\xDC]/g, "U")
.replace(/[\xDD]/g, "Y")
.replace(/[\xDE]/g, "P")
.replace(/[\xE0-\xE5]/g, "a")
.replace(/[\xE6]/g, "ae")
.replace(/[\xE7]/g, "c")
.replace(/[\xE8-\xEB]/g, "e")
.replace(/[\xEC-\xEF]/g, "i")
.replace(/[\xF1]/g, "n")
.replace(/[\xF2-\xF6\xF8]/g, "o")
.replace(/[\xF9-\xFC]/g, "u")
.replace(/[\xFE]/g, "p")
.replace(/[\xFD\xFF]/g, "y");
}
return str;
}
Ответ 4
Если у вас есть текст как
var sampleText= "ä_öü_ßÄ_ TESTED Ö_Ü! @# $% ^ & amp;()) (& & ++; = ===. XYZ"
Чтобы заменить все специальные символы (! @# $% ^ & Amp;()) (& ++ = ==.) Без замены символов (включая умляут)
Используйте ниже регулярное выражение
sampleText= sampleText.replace(/['~! @# $% ^ & *() | + - =?;:' ",. & lt;> {} [] \/\ s]/gi, '');
ВЫХОД: sampleText = "ä_öü_ßÄ ____ TESTED_Ö_Ü _____________________ XYZ"
Это заменит все с подчеркиванием, которое предоставляется в качестве второго аргумента функции замены. Вы можете добавить все, что вы хотите в соответствии с вашими требованиями
Ответ 5
var str = "Привет, мир и привет, вселенная"
Чтобы заменить пробелы и символы за один раз, мы можем использовать приведенный ниже код регулярного выражения.
str.replaceAll( "\\ W+", "")
Примечание:\W → представляет не слова (включая пробелы/специальные символы) | + → один или несколько совпадений
Попробуй!