Регулярное выражение: любой символ, НЕ являющийся буквой или цифрой.


113

Я пытаюсь найти регулярное выражение, которое будет соответствовать любому символу, кроме буквы или числа. Итак, такие символы, как (,, @, £, () и т. Д.

Найдя, я хочу заменить его пустым пространством.

Любой совет.

Ответы:


165

Чтобы найти что-либо, кроме буквы или цифры, вы можете попробовать следующее:

[^a-zA-Z0-9]

И заменить:

var str = 'dfj,dsf7lfsd .sdklfj';
str = str.replace(/[^A-Za-z0-9]/g, ' ');

17
\wпредназначен для символов Word и в точности совпадает с [a-zA-Z0-9_](обратите внимание, что подчеркивание считается символом слова.) ... таким образом, сокращение будетstr.replace(/[^\w]/g, ' ')
Джоэл Меллон

но он также будет включать много букв юникода! есть ли способ исключить буквы юникода?
Clite Tailor

1
Чтобы включить символы Юникода, вы можете использовать [^ \ p {L} 0-9]
Дэйв,

@Dave: По состоянию на 2018 год вы не можете без полифила, по-видимому ... stackoverflow.com/questions/280712/javascript-unicode-regexes
Николай

есть ли способ вместо повторного использования пробела ... заменить на "\", за которым следует символ, который был идентифицирован? Как это: превратить этот dfj, dsf7lfsd .sdklfj в этот dfj \, dsf7lfsd \ .sdklfj?
CrazySpy

39

Это регулярное выражение соответствует всему, что не является буквой, цифрой или _символом подчеркивания ( ).

\W

Например, в JavaScript:

"(,,@,£,() asdf 345345".replace(/\W/g, ' '); // Output: "          asdf 345345"

Я считаю, что он ищет / (_ | \ W) / g, чтобы соответствовать чему-либо, кроме цифры или буквы (на английском языке)
Кеннебек

@sbmaxx Я хочу заменить все эти символы, кроме &, (,). как я могу добавить это условие в текущее регулярное выражение.
K Pal

17

Ты ищешь:

var yourVar = '1324567890abc§$)%';
yourVar = yourVar.replace(/[^a-zA-Z0-9]/g, ' ');

Это заменяет все не буквенно-цифровые символы пробелом.

Буква «g» в конце заменяет все вхождения.

Вместо указания аз (нижний регистр) и AZ (заглавные буквы) , которые вы можете использовать в-чувствительны к регистру вариант: /[^a-z0-9]/gi.


Будет ли он соответствовать пространствам? Мне нужно оставить места. Спасибо.
Джеймс Джеффри

Символы пробела будут совпадать, но затем будут заменены символами пробела, так что фактически он оставит их в покое (пробел останется пробелом).
jimbo 07

9

Это слишком поздно, но, поскольку нет принятого ответа, я хотел бы дать то, что я считаю самым простым: \ D - соответствует всем нецифровым символам.

var x = "123 235-25%";
x.replace(/\D/g, '');

Результат в x: "12323525"

См. Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions.


5

попробуйте выполнить str.replace (/ [^ \ w] /); Он заменит все не алфавиты и числа из вашей строки!

Изменить 1: str.replace(/[^\w]/g, ' ')


2
Рабочий ответ был бы str.replace(/[^\w]/g, ' '). Если вы не включите /gфлаг, он заменит только первое вхождение. И если вы не определяете заменяющую строку, здесь пустое место ' ', она будет заменена undefinedповсюду. Наконец, подчеркивания не будут заменены, потому что они совпадают \w. Этот ответ не идеален.
Жюльен Лирошон

4
  • Только буквы соответствия /[A-Z]/ig
  • Совпадение чего-либо, кроме букв /[^A-Z]/ig
  • Только номер матча /[0-9]/gили/\d+/g
  • Соответствует чему-либо, кроме числа /[^0-9]/gили/\D+/g
  • Сопоставьте что-либо, кроме цифры или буквы /[^A-Z0-9]/ig

Возможны и другие закономерности


3

Просто чтобы другие увидели:

someString.replaceAll("([^\\p{L}\\p{N}])", " ");

удалит все символы Юникода, не являющиеся буквами и цифрами.

Источник


Я не уверен, откуда взялись два положительных голоса, но в JavaScript (о котором идет речь в этом вопросе) их нет replaceAll, и \p{..}экранирование свойств широко не реализовано.
Николай

2

Вы пробовали, чтобы str = str.replace(/\W|_/g,'');он вернул строку без какого-либо символа, и вы можете указать, есть ли какой-либо особый символ после полосы канала, |чтобы их также поймать.

var str = "1324567890abc§$)% John Doe #$@'.replace(/\W|_/g, ''); он вернется str = 1324567890abcJohnDoe

или найдите цифры и буквы и замените их пустой строкой (""):

var str = "1324567890abc§$)% John Doe #$@".replace(/\w|_/g, ''); он вернется str = '§$)% #$@';


1

Чтобы сопоставить что-либо, кроме буквы, цифры или буквы с диакритическими знаками, например, éвы можете попробовать следующее:

[^\wÀ-úÀ-ÿ]

И заменить:

var str = 'dfj,dsf7é@lfsd .sdklfàj1';
str = str.replace(/[^\wÀ-úÀ-ÿ]/g, '_');

По мотивам верхнего поста с поддержкой диакритических знаков

источник

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.