Как удалить все символы из строки - PullRequest
10 голосов
/ 19 июня 2009

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

Ответы [ 3 ]

57 голосов
/ 19 июня 2009

Вы можете использовать метод 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) ).

11 голосов
/ 16 декабря 2011

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

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

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

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

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

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

+: соответствует предыдущему пункту 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);

Для сопоставления пробельных символов также \ s будет добавлено в регулярное выражение [^a-z\s]+.

Справочник по JavaScript

8 голосов
/ 20 декабря 2011

Регулярные выражения в реализациях ECMAScript ИМХО лучше всего объяснить в Mozilla Developer Network (ранее Mozilla Developer Center) в статье 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 " и " жених ").

Таким образом, среди других функций 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, который исключает все неписковые символы Юникода (и пробел во втором примере).

TestCase

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

¹ Панграммы из Википедия , свободная энциклопедия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...