Я полагаю, что в программировании не всегда ясно, что означает «обратный».
Чтобы предложить решение, основанное исключительно на примере, представленном вами, я расскажу о том, что очень похоже на то, что представил Винс. Мне сложно составить регулярное выражение, которое соответствует шаблону, который вам нужен, и фиксирует потенциально произвольное количество цифр, повторяя группы захвата. И я не уверен, будет ли это выполнимо разумным способом (возможно, кто-то другой). Но двухступенчатый подход должен быть простым.
Следует заметить, что я имею в виду функцию замены JavaScript, которая является членом объекта String, а не jQuery replaceWith и replaceAll, ссылаясь на функцию jQuery replace. Последние являются функциями «манипуляции с объектом». Но, поправьте меня, если я неправильно понял.
В качестве примера, на основе какого-то гипотетический ввода, вы можете использовать
<b>var numeric_raw = jQuery('input.textbox').attr ('value').replace (/[^0-9.]/g, "")</b>
, чтобы удалить все символы из значения, введенное в текстовом поле, которые не являются цифрой или периодов; , то вы можете использовать
<b>var numeric_str = numeric_raw.replace (/^[0]*(\d+\.\d{1,2}).*$/, "$1")</b>
Разница между классами, указанными здесь и в ответ Винса в том, что я в том числе фильтрация ведущих 0s. Следует отметить, что в первой редакции Винса может появиться дополнительная «/» - но, возможно, у нее есть цель, которую я не поймал.
Что касается «обратного», то один из способов понять ваш первоначальный запрос состоит в том, что вы ищете выражение, которое делает противоположное тому, которое вы предоставили. Следует отметить, что выражение, которое вы предоставили (/[0-9]+(.[0-9]{1,2})?/), соответствует как целым числам, так и десятичным числам с точностью до двух дробных цифр, это также соответствует любой отдельной цифре - поэтому он может идентифицировать совпадение, в котором не может быть предусмотрено, для данной входной строки. Выражение не имеет якорей ('^', '$'), и поэтому может допускать несколько возможных совпадений. Например, в строке «1.111» оба «1.11» и «1» соответствуют шаблону, который вы указали.
Мне кажется, что один шаблон, который соответствует любой строке, которая не соответствует вашему шаблону состоит в следующем, или, по крайней мере, делает это в большинстве случаев может быть это:
/^(?:(?!.*[0-9]+(\.[0-9]{1,2})?).*)*$/
- если кто-то может определить точно «обратный» образец, пожалуйста, не стесняйтесь - у меня возникают проблемы с пониманием того, как взгляды интерпретируются хотя бы для некоторых нюансов.
Это зависит от функциональности «негативный взгляд», которую поддерживает JavaScript в наши дни. Вы можете обратиться к нескольким проводкам stackoverflow для получения дополнительной информации (например, Regular Expressions and negating a whole character group), и есть несколько ресурсов, которые можно найти в Интернете, где обсуждаются «lookahead» и «lookbehind».
Я полагаю, что этот ответ несет некоторую избыточность по отношению к уже предоставленному - я мог бы прокомментировать сообщение Оригинального Плаката или ответ Винса (вместо того, чтобы писать хотя бы часть моего ответа), но я еще не был возможность комментировать!
Возможно, мы можем лучше помочь в выполнении конкретной задачи, которую вы хотите выполнить, отрицая регулярное выражение? А также укажите язык программирования, который вы используете. – justhalf
И какова ваша ожидаемая принятая строка? – justhalf
@justhalf Я обновил вопрос для большей ясности относительно того, что я хочу выполнить – LJS