Если у меня есть строка с любым типом не буквенно-цифровых символов:
"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"
Как бы получить версию без пунктуации в JavaScript:
"This is an example of a string with punctuation"
javascript
regex
Квентин Фиск
источник
источник
\s
) одним пробелом. Если вы хотите , чтобы свернуть любое количество пробельных символов вплоть до одного, вы бы оставить приподнять верхний предел следующим образом:replace(/\s{2,}/g, ' ')
.@+?><[]+
):replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()@\+\?><\[\]\+]/g, '')
. Если кто-то ищет еще немного более полный набор.!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
что работает лучше для меня, поэтому другой альтернативой будет:replace(/['!"#$%&\\'()\*+,\-\.\/:;<=>?@\[\\\]\^_`{|}~']/g,"");
Удаляет все, кроме буквенно-цифровых символов и пробелов, затем объединяет несколько смежных символов в один пробел.
Детальное объяснение:
\w
любая цифра, буква или подчеркивание.\s
это любые пробелы.[^\w\s]
это все, что не является цифрой, буквой, пробелом или подчеркиванием.[^\w\s]|_
такой же, как # 3, за исключением того, что подчеркивания добавлены обратно.источник
wouldn't
иdon't
Вот стандартные знаки препинания для US-ASCII:
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Для знаков препинания в Юникоде (таких как фигурные кавычки, тире и т. Д.) Можно легко сопоставить определенные диапазоны блоков. Блок общей пунктуации есть
\u2000-\u206F
, а блок дополнительной пунктуации -\u2E00-\u2E7F
.Собрав вместе, и, правильно выйдя из строя, вы получите следующий RegExp:
Это должно соответствовать практически любой пунктуации, с которой вы сталкиваетесь. Итак, чтобы ответить на оригинальный вопрос:
Источник US-ASCII: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#posix
Источник Unicode: http://kourge.net/projects/regexp-unicode-block
источник
/ [^ A-Za-z0-9 \ s] / g должен соответствовать всем знакам препинания, но оставлять пробелы. Таким образом, вы можете использовать
.replace(/\s{2,}/g, " ")
для замены лишних пробелов, если вам нужно это сделать. Вы можете проверить регулярное выражение в http://rubular.com/Обновление : будет работать только в том случае, если ввод ANSI английский.
источник
Я столкнулся с той же проблемой, это решение помогло и было очень читабельным:
Результат:
Хитрость заключалась в том, чтобы создать отрицательный набор . Это означает, что оно соответствует всему, что не входит в набор, т.е.
[^abc]
- не a, b или c\W
любое слово, так[^\W]+
будет отменять все, что не является словом char .Добавляя в _ (подчеркивание), вы также можете отрицать это.
Сделайте так, чтобы он применялся глобально
/g
, тогда вы можете пропустить через него любую строку и очистить пунктуацию:Красиво и чисто;)
источник
Я просто положу это здесь для других.
Подберите все знаки препинания для всех языков:
Создан из категории знаков препинания Unicode и добавил некоторые общие символы клавиатуры, такие как
$
скобки и\-=_
http://www.fileformat.info/info/unicode/category/Po/list.htm
базовая замена:
добавил \ s как пробел
добавлен ^, чтобы инвертировать patternt, чтобы соответствовать не пунктуации, а словам самим себе
для языка, такого как иврит, возможно, чтобы удалить "'одинарные и двойные кавычки. и больше думать об этом.
используя этот скрипт:
шаг 1: выберите в элементе управления Firefox столбец с номерами U + 1234 и скопируйте его, не копируйте U + 12456, они заменяют английский
Шаг 2 (я сделал в Chrome) найти текстовое поле и вставить его в него, затем щелкните правой кнопкой мыши и нажмите осмотреть. тогда вы можете получить доступ к выбранному элементу с $ 0.
шаг 3 скопировал по первым буквам ascii как отдельные символы, а не диапазоны, потому что кто-то может добавить или удалить отдельные символы
источник
В языке, поддерживающем Unicode, свойство символа пунктуации Unicode
\p{P}
- это, которое вы обычно можете сокращать,\pP
а иногда и расширять до\p{Punctuation}
для удобства чтения.Используете ли вы Perl-совместимую библиотеку регулярных выражений?
источник
Если вы хотите удалить пунктуацию из любой строки, вы должны использовать
P
класс Unicode.Но, поскольку классы не принимаются в JavaScript RegEx, вы можете попробовать этот RegEx, который должен соответствовать всем пунктуации. Он соответствует следующим категориям: Pc Pd Pe Pf Pi Po Ps Sc Sk Sm So Общая пунктуация Дополнительная пунктуация CJKSymbolsAndПунктуация CuneiformNumbersAndPunctuation.
Я создал его с помощью этого онлайн-инструмента, который генерирует регулярные выражения специально для JavaScript. Вот код для достижения вашей цели:
источник
Для строк en-US (американский английский) этого должно быть достаточно:
Имейте в виду, что если вы поддерживаете UTF-8 и такие символы, как китайский / русский и все, это также заменит их, поэтому вам действительно нужно указать, что вы хотите.
источник
если вы используете lodash
Этот пример
источник
В соответствии со списком пунктуации Википедии мне пришлось построить следующее регулярное выражение, которое обнаруживает знаки препинания:
[\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’“”'";/⁄·\&*@\•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]
источник
/
(наиболее часто) , то он должен быть экранирован внутри символьного класса выше, добавив обратный слэш перед тем , как это:\/
. Это, как вы бы использовать:"String!! With, Punctuation.".replace(/[\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’“”'";\/⁄·\&*@\•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]+/g,"")
. Между прочим, я нигде не вижу обратной черты (`), как получилось?Если вы хотите сохранить только алфавиты и пробелы, вы можете сделать:
источник
Это зависит от того, что вы пытаетесь вернуть. Я использовал это недавно:
источник