Как скрыть оператор Groovy Match Operator?

documentation упоминает три специальных оператора с регулярным выражением:

  • ~ возвращает Pattern
  • =~ сохранение Matcher
  • ==~ возвращает boolean

Теперь, как я могу отменить последний? (Я согласен, что другие не могут иметь никакого значимого отрицания.)

Я пробовал очевидное мышление:

println 'ab' ==~ /^a.*/ // true: yay, matches, let change the input
println 'bb' ==~ /^a.*/ // false: of course it doesn't match, let negate the operator
println 'bb' !=~ /^a.*/ // true: yay, doesn't match, let change the input again
println 'ab' !=~ /^a.*/ // true: ... ???

Я думаю, что последние два следует интерпретировать следующим образом:

println 'abc' != ~/^b.*/

где я вижу new String("abc") != new Pattern("^b.*") true.

Ответ 1

AFAIK, в Groovy нет оператора спрятанных операторов регулярного выражения.

Итак, как уже упоминалось cfrick, кажется, что лучшим ответом является отрицание всего выражения:

println !('bb' ==~ /^a.*/)

Другим решением является инвертирование регулярного выражения, но мне кажется, что оно менее читаемо:

Как я могу инвертировать регулярное выражение в JavaScript?