Как удалить все символы из строки

Как удалить все символы из строки, которая не является буквой с использованием JavaScript RegEx?

Ответ 1

Вы можете использовать метод replace:

'Hey! The #123 sure is fun!'.replace(/[^A-Za-z]+/g, '');
>>> "HeyThesureisfun"

Если вы хотите сохранить пробелы:

'Hey! The #123 sure is fun!'.replace(/[^A-Za-z\s]+/g, '');
>>> "Hey The sure is fun"

Регулярное выражение /[^a-z\s]/gi в основном говорит, чтобы соответствовать чему-либо, а не букве az или пробелу (\ s), делая это глобально (флаг g) и игнорируя случай строки (флаг i).

Ответ 2

RegEx используемые свойства экземпляра g, i

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

ignoreCase:     Следует ли игнорировать регистр при попытке совпадения в строке.

RegEx используются специальные символы [a-z], +

[^ xyz]: отрицательный или дополненный набор символов. То есть, он соответствует любому, что не заключено в скобки. Вы можете указать диапазон символов с помощью дефиса.

Например, [abcd] совпадает с [a-d]. Они соответствуют "b" в "грудинка" и "c" в "отбивной".

+: соответствует предыдущему элементу 1 или более раз. Эквивалентно {1,}.

JavaScript строка заменить синтаксис метода

str.replace(regexp | substr, newSubStr | function [, Нестандартные флаги]);

Нестандартные флаги g и i могут быть переданы в синтаксисе замены или встроены в регулярное выражение. примеры:

var re = /[^a-z]+/gi;   var str = "this is a string";   var newstr = str.replace(re, "");   print(newstr);

var str = "this is a string";   var newstr = str.replace(/[^a-z]+/, "", "gi");   print(newstr);

Чтобы совместить символы пробелов, а \re будет добавлен в regex [^a-z\s]+.

Справочник JavaScript

Ответ 3

Регулярные выражения в Реализации ECMAScript лучше всего объясняются на Mozilla Developer Network (ранее, Центр разработчиков Mozilla) в RegExp статье Справочник по языку JavaScript стр.

Однако, как уже отмечалось, в предыдущих ответах не учитываются неанглийские буквы, например, умлауты и буквы с акцентом. Чтобы не удалять эти буквы из строки, вы должны исключить их из диапазона символов следующим образом:

var s = "Victor 1 jagt 2 zwölf 3 Boxkämpfer 4 quer 5 über 6 den 7 Sylter 8 Deich";

s = s.replace(/[^a-zäöüß]+/gi, "");

Этот подход быстро становится утомительным и трудным для поддержания, особенно если необходимо учитывать несколько естественных языков (и даже на правильном английском языке есть такие иностранные слова, как "déjà vu" и "fiancé" ).

Поэтому среди других PCRE функции JSX: regexp.js позволяет использовать регулярные выражения, которые могут использовать классы свойств Unicode, через Unicode Character Database (UCD).

Затем вы записали¹

var s = "Victor 1 jagt 2 zwölf 3 Boxkämpfer 4 quer 5 über 6 den 7 Sylter 8 Deich";

var rxNotLetter = new jsx.regexp.RegExp("\\P{Ll}+", "gi");

s = s.replace(rxNotLetter, "");

или

var s = "El 1 veloz 2 murciélago 3 hindú 4 comía 5 feliz 6 cardillo 7 y 8 kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja"
      + " – Съешь 1 же 2 ещё 3 этих 4 мягких 5 французских 6 булок, да 7 выпей 8 чаю.";

var rxNotLetterOrWhitespace = new jsx.regexp.RegExp("[^\\p{Ll}\\p{Lu}\\s]+", "g");

s = s.replace(rxNotLetterOrWhitespace, "");

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

Тестирование

Обязательно укажите версию базы данных символов Юникода, потому что она большая, в потоке и, следовательно, не встроена в regexp.js(JSX содержит подробный текст и сжатую версию UCD версии w370; может использоваться, а последнее предпочтительнее, regexp.js). Обратите внимание, что соответствующая реализация ECMAScript не нуждается в поддержке символов за пределами базовой многоязычной плоскости (U + 0000 до U + FFFF), поэтому jsx.regexp.RegExp в настоящее время не могут поддерживать их, даже если они находятся в UCD. Подробнее см. Документацию в исходном коде.

¹ Pangrams от Wikipedia, свободная энциклопедия.