Регулярне вираження: Будь-який символ, який НЕ букви та цифри


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, ' ')
Джоел Меллон

але він також буде включати багато літер унікоду! чи є якийсь спосіб виключити букви Unicode?
Кравець Clite

1
Щоб включити символи Unicode, ви можете використовувати [^ \ p {L} 0-9]
Дейв

@Dave: Станом на 2018 рік ти не можеш без поліфункції, мабуть ... stackoverflow.com/questions/280712/javascript-unicode-regexes
Nickolay

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

39

Цей регулярний вираз відповідає будь-якому _символу букви, цифри або символу підкреслення ( ).

\W

Наприклад у JavaScript:

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

Я вважаю, що він шукає / (_ | \ W) / g, щоб відповідати чому-небудь, не цифрі чи букві (англійська мова)
kennebec

@sbmaxx Я хочу замінити всіх, крім &, (,) цих символів. як я можу додати цю умову в поточному регулярному виразі.
K Pal

17

Ви шукаєте:

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

Це замінює всі не алфавітно-цифрові символи пробілом.

"G" в кінці замінює всі події.

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


Чи відповідатиме це пробілам? Мені потрібні місця, щоб їх зберегли. Дякую.
Джеймс Джеффрі

Космічні символи збігаються, але потім їх замінять символи пробілу, тому фактично це залишить їх у спокої (пробіл залишиться пробілом).
jimbo

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

видалить будь-які символи unicode без букви та без числа.

Джерело


Я не впевнений, звідки з’явилися два оновлення, але в 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.