Вопрос по regex, javascript, string – Как удалить все символы из строки

10

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

щедрость - это не «сделай проверенный код для меня» кнопка. AlfredoVR
@RD - Какой возможный ответ вы ожидаете? Я не думаю, что это становится намного проще, чем ответ Паоло ... И какие "заслуживающие доверия и / или официальные источники"!? Это не имеет никакого смысла ... Kobi

Ваш Ответ

3   ответа
8

Регулярные выражения вECMAScript реализации ИМХО лучше всего объяснить наСеть разработчиков Mozilla (ранее - Центр разработчиков Mozilla) вRegExp article изСправочник по языку JavaScript стр.

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

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, "");

Такой подход быстро становится утомительным и трудным для поддержания, особенно еслиseveral необходимо учитывать естественные языки (и даже в надлежащем английском языке есть такие иностранные слова, как & quot;déjà vu& Quot; и & quot;fiancé& Quot;).

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

Затем вы должны написать & # xB9;

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; обе могут использоваться, и последний является предпочтительным, regexp.js). Обратите внимание, чтосоответствующая реализация ECMAScript не должна поддерживать символы за пределами базовой многоязычной плоскости (от U + 0000 до U + FFFF), такjsx.regexp.RegExp в настоящее время не может поддержать тех, даже если они находятся в UCD. Смотрите документацию в исходном коде для деталей.

& # XB9;Pangrams отВикипедия, свободная энциклопедия.

Upvoted. Это необходимо, если есть не английские символы!
57

Вы можете использовать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 в основном говорит, чтобы соответствовать чему-либо, кроме буквы a-z или пробела (\ s), делая это глобально (g флаг) и игнорируя регистр строки (i флаг).

@ Caseman Вы имеете в виду….replace(/[^A-Za-z\s]+/g, "").replace(/\s+/g, " "), Также обратите внимание, что строки неизменны, поэтому"foo".replace(…); как есть, имеет мало смысла.
+1 Но я бы использовал чуть более эффективный эквивалент:replace(/[^A-Za-z\s]+/g, ''); Это будет соответствовать более чем одному символу в каждом «gulp», и чувствительный к регистру режим может быть немного быстрее с некоторыми механизмами регулярных выражений.
Обратите внимание, что это также удалит подчеркнутые символы, которые, по моему мнению, являются буквами.
Просто проверил это в консоли, и он работал отлично. Интересно, хотел ли он сохранить пространство.
Одной из проблем будет дублирование пробелов (с помощью метода keep пробелов) - просто зацепите его другой заменой:replace(/[^A-Za-z\s]+/g, "").replace(/\s+/, " ");
10

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

global : Whether to test the regular expression against all possible matches in a string, or only against the first.

ignoreCase : Whether to ignore case while attempting a match in a string.

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

[^xyz] : A negated or complemented character set. That is, it matches anything that is not enclosed in the brackets. You can specify a range of characters by using a hyphen.

For example, [abcd] is the same as [a-d]. They match the 'b' in "brisket" and the 'c' in "chop".

+ : Matches the preceding item 1 or more times. Equivalent to {1,}.

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

str.replace(regexp|substr, newSubStr|function[, Non-standard flags]);

Нестандартные флаги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

Флаги в стандарте ECMAScript. Но третий (флаг) аргументString.prototype.replaceявляетсяJavaScript-proprietary, Избегайте использования флагов для первого (RegExp) аргумента.

Похожие вопросы