Подтвердить что ты не робот

Удалите специальные символы и лишние пробелы и замените подчеркивание, используя метод замены

Я хочу удалить все специальные символы и пробелы из строки и заменить их подчеркиванием. Строка

    var str = "hello world & hello universe";

Теперь у меня есть это, которое заменяет только пробелы:

      str.replace(/\s/g, "_");

В результате я получаю hello_world_&_hello_universe, но я бы тоже хотел удалить специальные символы.

Я попробовал это str.replace(/[^a-zA-Z0-9]\s/g, "_"), но это не помогает.

4b9b3361

Ответ 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 → представляет не слова (включая пробелы/специальные символы) | + → один или несколько совпадений

Попробуй!