如何组合RegEx条件?

How to combine RegEx conditions?

我需要制作一个 QLineEditQRegularExpressionValidator 并具有以下 3 个约束条件:

  1. 不能以空开头space^[\S]
  2. 不能以你好开头^(?!Hello).+
  3. 不能以空结尾space^.*[\S]$

如何将这 3 个组合到一个正则表达式中,以便我可以将其设置为 QRegularExpressionValidator

谢谢!

注意:只要我有一个可以用正则表达式工具验证的正则表达式,我就很好。我指定 Qt 只是为了提供更多上下文。

应该这样做:

var strings = [
  'a',
  'this is ok',
  ' leading space',
  'trailing space ',
  'Hello text',
  'Hello'
];
var re = /^([^\s]|(?!(Hello|\s)).*[^\s])$/;
strings.forEach((str) => {
  var val = re.test(str);
  console.log('"' + str + '" ==> ' + val);
});

控制台输出:

"a" ==> true
"this is ok" ==> true
" leading space" ==> false
"trailing space " ==> false
"Hello text" ==> false
"Hello" ==> false

正则表达式的解释:

  • ^...$ -- 首尾锚点
  • ([^\s]|...) -- 逻​​辑 ,其中第一部分是单个非 space 字符
  • (?!(...)).+ -- 否定前瞻
  • (Hello|\s) -- ... 'Hello' 或 space
  • .+[^\s] -- 后跟任意数量的字符,但末尾的 space 除外

你可以使用

^(?!Hello\b)\S(?:.*\S)?$

说明

  • ^ 字符串开头
  • (?!Hello\b) 否定前瞻,断言右边的不是 Hello
  • \S 匹配非空白字符
  • (?:.*\S)? 可选择匹配 0+ 次任何字符,换行符和非空白字符除外
  • $ 字符串结束

Regex demo