Проверьте наличие определенного суффикса от RegEx и выберите полное совпадение, включая суффикс - PullRequest
4 голосов
/ 20 июня 2019

Прежде всего, это мой первый вопрос в сообществе, поэтому прошу прощения за мои ошибки, эксперты!Я изучаю регулярные выражения и столкнулся со сценарием, в котором мне не удалось создать ответ самостоятельно.

Скажем, если есть огромный параграф, можем ли мы сначала сопоставить на основе конкретного суффикса (скажем, «%») иТолько затем вернитесь и выберите нужную логику, включая суффикс?

, например, часть текста: «abcd efghMNP 0,40% ijkl mnopSNP -3,20% xyz».Теперь в этом, если вы заметите - и я получил это очень много - что есть шаблон, такой как

/([MS]NP[\s\d\.-%]+)/

, я хочу заменить «MNP 0.40%» или «SNP -3.20%» на пустое.замена части кажется легкой :) Но проблема заключается в том, что во время обучения я не могу выбрать желаемое ТОЛЬКО ЕСЛИ существует «%» в конце матча.

Последовательность соответствия, к которой я хочу достичь, такова: если суффикс «%» существует, то соответствует предыдущему шаблону, а в случае успеха выберите все, включая суффикс, и замените его пустым.

Ответы [ 3 ]

1 голос
/ 20 июня 2019

Существует несколько выражений, например, с добавленными ограничениями:

[A-Z]{3}\s+[-+]?[0-9.]+\s*%

Test

const regex = /[A-Z]{3}\s+[-+]?[0-9.]+\s*%/gm;
const str = `abcd efghMNP 0.40 % ijkl mnopSNP -3.20 % xyz

"MNP 0.40 %" or "SNP -3.20 %"`;
const subst = ``;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log(result);

Демонстрация 1

Или упрощенная версия будет:

[A-Z]{3}(.*?)%

Демонстрация 2

1 голос
/ 20 июня 2019

Вы не можете вернуться к соответствию, если вы столкнулись с суффиксом %, но вы можете сделать его частью шаблона так, чтобы оно соответствовало.

В JavascriptВы можете выполнить нулевое значение длины прогнозное утверждение (?=, убедившись, что то, что справа, содержит шаблон или, в данном случае, %, но это не будет реальной выгодой в этом случае, как вы хотитеэто должно быть частью совпадения.

Чуть более конкретное совпадение может быть:

[MS]NP\s*-?\d+(?:\.\d+)?\s*%
  • [MS]NP Совпадение M или S, за которым следует NP
  • \s*-? Соответствует 0+ раз символу пробела, за которым следует необязательный -
  • \d+(?:\.\d+)? Соответствует цифрам 1+, за которыми следует дополнительная часть, чтобы соответствовать точке и цифрам 1+
  • \s*% Совпадение 0+ пробельных символов с последующим сопоставлением %

Regex demo

0 голосов
/ 20 июня 2019

Используйте регулярные выражения с не захватывающими скобками , например, так:

string = 'example string with an intended nested string to match.';
regexp = /(?:intended)(.*)(?:to match)/;
firstMatch = regexp.exec(string)[1]; // " nested string "

Знак вопроса имеет несколько применений в регулярных выражениях, скобка в круглых скобках в форме вопросительного знака (?: Moreregex) * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. регулярные выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...