Я ищу отличное решение RegEx для замены
- Все не буквенно-цифровые символы
- Все NewLines
- Все несколько экземпляров белого пространства
С единым пространством
Для тех, кто играет дома (работает следующее )
text.replace(/[^a-z0-9]/gmi, " ").replace(/\s+/g, " ");
Я думаю, что RegEx , вероятно, достаточно мощен, чтобы добиться этого одним оператором. Я думаю, что id нужны компоненты:
[^a-z0-9]
- Удалить не буквенно-цифровые символы\s+
- соответствовать любым коллекциям пространств\r?\n|\r
- сопоставить все новые строки/gmi
- глобальный, многострочный, без учета регистра
Однако я не могу правильно стилизовать регулярное выражение ( следующее не работает )
text.replace(/[^a-z0-9]|\s+|\r?\n|\r/gmi, " ");
вход
234&^%,Me,2 2013 1080p x264 5 1 BluRay
S01(*&asd 05
S1E5
1x05
1x5
Желаемый вывод
234 Me 2 2013 1080p x264 5 1 BluRay S01 asd 05 S1E5 1x05 1x5
javascript
regex
replace
alphanumeric
Генерал
источник
источник
Ответы:
Имейте в
\W
виду , что остается подчеркивание . Краткий эквивалент для[^a-zA-Z0-9]
будет[\W_]
\W
является отрицанием стенографии\w
для[A-Za-z0-9_]
символов слова ( в том числе и подчеркивания)Пример на regex101.com
источник
\W
нелатинские символы также распознаются как символы, отличные от слов.Джонни 5 опередил меня. Я собирался предложить использовать
\W+
без\s
as intext.replace(/\W+/g, " ")
. Это также покрывает пустое пространство.источник
\W+
, а не[W+]
Что ж, с новым годом всех!&
и-
. Какие-нибудь советы?Поскольку
[^a-z0-9]
класс символов содержит все, что не является alnum, он также содержит белые символы!источник
Я думаю, вам просто нужно добавить квантификатор к каждому шаблону. Также немного забавна вещь с возвратом каретки:
редактировать The
\s
вещь матчи\r
и\n
тоже.источник
А видел другой пост, в котором также были диакритические знаки, и это здорово
s.replace(/[^a-zA-Z0-9À-ž\s]/g, "")
источник
Это старый мой пост, принятые ответы по большей части хороши. Однако я решил протестировать каждое решение и еще одно очевидное (просто для удовольствия). Мне было интересно, есть ли разница между шаблонами регулярных выражений в разных браузерах со строками разного размера.
В основном я использовал jsPerf на
Шаблоны регулярных выражений, которые я тестировал, были
/[\W_]+/g
/[^a-z0-9]+/gi
/[^a-zA-Z0-9]+/g
Я загрузил их строкой случайных символов
Пример javascript, который я использовал
var newstr = str.replace(/[\W_]+/g," ");
Каждый запуск состоял из 50 или более образцов для каждого регулярного выражения, и я запускал их 5 раз в каждом браузере.
Давайте скакать на наших лошадях!
Полученные результаты
По правде говоря, Regex в обоих браузерах (с учетом отклонений) были почти неразличимы, однако я думаю, что если бы он запускал это еще больше раз, результаты стали бы немного более ясными (но не намного).
Теоретическое масштабирование для 1 символа
Я бы не стал вдаваться в подробности этих результатов, так как на самом деле это не существенные различия, все, что мы действительно можем сказать, это край медленнее: o Кроме того, мне было очень скучно.
В любом случае вы можете запустить тест самостоятельно.
Тест Jsperf здесь
источник
Чтобы заменить дефисы, сделайте следующее:
источник