Regex (в JavaScript Find / Share) - сопоставить не буквенно-цифровые символы, но игнорировать - и +

StackOverflow https://stackoverflow.com/questions/3177999

Вопрос

Мы использовали следующие JS / Regex, чтобы найти и заменить все не буквенно-цифровые символы, кроме - и +

OndingString = OndingString.replace (/ [^  W | ^  + | ^ -] * / g, "");

Однако это не работает полностью - он не заменяет ^ и | персонажи. Я не могу не удивляться, если это что-то связано с ^ и | используется в качестве мета-символов в самом регезе.

Я пытался перейти на использование [\W|^+|^-], но это заменяет - и +. Я думал, что, возможно, Ahead Assertion может быть ответом, но я не очень уверен, как их реализовать.

У кого-нибудь есть идея, как это достичь?

Это было полезно?

Решение

Классы персонажей не делают чередования, отсюда, почему | это буквальный, а ^ Должно быть в начале класса, чтобы вступить в силу (в противном случае он обрабатывается буквально.)

Использовать это:

[^\w+-]+

(Кроме того, если - не последний, он должен быть сбежен как \- Внутри класса символов - поэтому будьте осторожны, если в список исключений можно добавить больше символов).

Вы также можете сделать это с негативным, как это:

(?![+-])\W

Примечание: вы не хотите * или + после этого \W, так как leyahead относится только к немедленно следующему персонажу (и g Флаг делает замену повторение до тех пор, пока не будет выполнен).

Также обратите внимание \w и \W рассмотреть возможность _ как слово персонажа. Если это не желательно, чтобы заменить, чтобы вы могли использовать (?![+-])[\W_] (или использовать явные диапазоны в первых выражениях).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top