Как удалить все символы из строки, которая не является буквой с использованием 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]+
.
Ответ 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. Подробнее см. Документацию в исходном коде.