Regex (в JavaScript Find / Share) - сопоставить не буквенно-цифровые символы, но игнорировать - и +
-
02-10-2019 - |
Вопрос
Мы использовали следующие JS / Regex, чтобы найти и заменить все не буквенно-цифровые символы, кроме - и +
OndingString = OndingString.replace (/ [^ W | ^ + | ^ -] * / g, "");
Однако это не работает полностью - он не заменяет ^ и | персонажи. Я не могу не удивляться, если это что-то связано с ^ и | используется в качестве мета-символов в самом регезе.
Я пытался перейти на использование [\W|^+|^-]
, но это заменяет - и +. Я думал, что, возможно, Ahead Assertion может быть ответом, но я не очень уверен, как их реализовать.
У кого-нибудь есть идея, как это достичь?
Решение
Классы персонажей не делают чередования, отсюда, почему |
это буквальный, а ^
Должно быть в начале класса, чтобы вступить в силу (в противном случае он обрабатывается буквально.)
Использовать это:
[^\w+-]+
(Кроме того, если -
не последний, он должен быть сбежен как \-
Внутри класса символов - поэтому будьте осторожны, если в список исключений можно добавить больше символов).
Вы также можете сделать это с негативным, как это:
(?![+-])\W
Примечание: вы не хотите *
или +
после этого \W
, так как leyahead относится только к немедленно следующему персонажу (и g
Флаг делает замену повторение до тех пор, пока не будет выполнен).
Также обратите внимание \w
и \W
рассмотреть возможность _
как слово персонажа. Если это не желательно, чтобы заменить, чтобы вы могли использовать (?![+-])[\W_]
(или использовать явные диапазоны в первых выражениях).