Regex, каждый не алфавитно-цифровой символ, кроме пробела или двоеточия
Я не могу понять, как сделать это где-нибудь. Любая помощь?
По сути, я пытаюсь сопоставить все разные символы, такие как амперсанды, точки с запятой, знаки доллара и т. Д.
12 ответов
[^a-zA-Z\d\s:]
- \d - числовой класс
- \s - пробел
- a-zA-Z - соответствует всем буквам
- ^ - отрицает их все - так что вы получите - не числовые символы, не пробелы и не двоеточия
Если вы хотите использовать символы латинского акцентирования (например, à Ñ) как обычные буквы (т.е. избегать их совпадения), вам также необходимо включить соответствующий диапазон 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, ".")
Смотрите онлайн пример:
В 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:]*$
Это сработало для меня...:)
[^\ш\с-]
Набор символов, которые не являются:
- буквенно-цифровой
- пробел
- Двоеточие