Regex, каждый не алфавитно-цифровой символ, кроме пробела или двоеточия

Я не могу понять, как сделать это где-нибудь. Любая помощь?

По сути, я пытаюсь сопоставить все разные символы, такие как амперсанды, точки с запятой, знаки доллара и т. Д.

12 ответов

Решение
[^a-zA-Z\d\s:]
  • \d - числовой класс
  • \s - пробел
  • a-zA-Z - соответствует всем буквам
  • ^ - отрицает их все - так что вы получите - не числовые символы, не пробелы и не двоеточия

Это должно сделать это: [^a-zA-Z\d\s:]Надеюсь, поможет!

Если вы хотите использовать символы латинского акцентирования (например, à Ñ) как обычные буквы (т.е. избегать их совпадения), вам также необходимо включить соответствующий диапазон Unicode ( \ u00C0- \ u00FF) в свое регулярное выражение, поэтому будет выглядеть так:

/[^a-zA-Z\d\s:\u00C0-\u00FF]/g
  • ^ отрицает то, что следует
  • a-zA-Z соответствует заглавным и строчным буквам
  • \d соответствует цифрам
  • \s соответствует пустому пространству (если вы хотите сопоставить только пробелы, замените его пробелом)
  • : соответствует двоеточию
  • \u00C0-\u00FF соответствует диапазону Unicode для латинских символов с ударением.

в северном направлении Сопоставление диапазона Юникода может не работать для всех движков регулярных выражений, но вышеприведенное, безусловно, работает в Javascript (как видно из этого пера на Codepen).

nb2. Если вы не беспокоитесь о соответствии подчеркивания, вы можете заменить a-zA-Z\d с \w, который соответствует буквам, цифрам и подчеркиванию.

Попробуй это

[^a-zA-Z0-9 :]

Пример JS:

"!@#$%* ABC def:123".replace(/[^a-zA-Z0-9 :]/g, ".")

Смотрите онлайн пример:

http://jsfiddle.net/vhMy8/

В JavaScript:

/[^\w_]/g

^отрицание, т.е. выбрать что-либо не в следующем наборе

\w любой символ слова (т.е. любой буквенно-цифровой символ плюс подчеркивание)

_ отрицать подчеркивание, так как он считается символом слова

Пример использования - const nonAlphaNumericChars = /[^\w_]/g;

Если вы имеете в виду "не буквенно-цифровые символы", попробуйте использовать это

var reg =/[^a-zA-Z0-9]/g         //[^abc] 

Никаких буквенно-цифровых символов, пробелов или "_".

var reg = /[^\w\s)]|[_]/g;

Предыдущие решения кажутся разумными только для английского или других латинских языков без акцентов и т. д. По этой причине эти ответы не обобщаются для ответа на вопрос.

Согласно статье о символах пробелов в Википедии, это все символы пробелов в Юникоде:

U+0009, U+000A, U+000B, U+000C, U+000D, U+0020, U+0085, U+00A0, U+1680, U+180E, U+2000, U+2001, U+2002, U+2003, U+2004, U+2005, U+2006, U+2007, U+2008, U+2009, U+200A, U+200B, U+200C, U+200D, U+2028, U+2029, U+202F, U+205F, U+2060, U+3000, U+FEFF

Итак, на мой взгляд, наиболее всеобъемлющее решение было бы (может быть медленным, но речь идет о точности):

      \u0009\u000A\u000B\u000C\u000D\u0020\u0085\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u200B\u200C\u200D\u2028\u2029\u202F\u205F\u2060\u3000\uFEFF

Таким образом, чтобы ответить на вопрос OP, чтобы включить «каждый небуквенно-цифровой символ, кроме пробела или двоеточия», добавьте шляпу^чтобы не включать вышеуказанные символы и добавить к ним двоеточие и окружить регулярное выражение в[и]чтобы указать ему «любой из этих символов»:

      "[^:\u0009\u000A\u000B\u000C\u000D\u0020\u0085\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u200B\u200C\u200D\u2028\u2029\u202F\u205F\u2060\u3000\uFEFF]"

Демонстрация отладчика


Бонус: решение для R

      trimws2 <- function(..., whitespace = "[\u0009\u000A\u000B\u000C\u000D\u0020\u0085\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u200B\u200C\u200D\u2028\u2029\u202F\u205F\u2060\u3000\uFEFF]") {
  trimws(..., whitespace = whitespace)
}

Это даже быстрее, чем сама функция trimws(), которая устанавливает "\t\n\r".

      microbenchmark::microbenchmark(trimws2(" \t\r\n"), trimws(" \t\r\n"))
#> Unit: microseconds
#>                   expr    min     lq     mean  median      uq     max neval cld
#>  trimws2(" \\t\\r\\n") 29.177 29.875 31.94345 30.4990 31.3895 105.642   100  a 
#>   trimws(" \\t\\r\\n") 45.811 46.630 48.25076 47.2545 48.2765 116.571   100   b

Это регулярное выражение работает для C#, PCRE и Go и многих других.

Это не работает для JavaScript в Chrome из того, что говорит RegexBuddy. Но здесь уже есть пример.

Основная часть этого:

\p{L}

который представляет \p{L} или \p{Letter} любое письмо с любого языка.


Само полное регулярное выражение: [^\w\d\s:\p{L}]

Пример: https://regex101.com/r/K59PrA/2

"0_0 (: /-\ :) 0-0".replace(/[^a-zA-Z0-9 :]/g,"")

работал на меня. Тем не мение,

replace(/[^a-zA-Z/d :]/g,"")

не работал для меня

Попробуйте добавить это

^[^a-zA-Z\d\s:]*$

Это сработало для меня...:)

[^\ш\с-]

Набор символов, которые не являются:

  • буквенно-цифровой
  • пробел
  • Двоеточие
Другие вопросы по тегам