如何组合RegEx条件?
How to combine RegEx conditions?
我需要制作一个 QLineEdit
和 QRegularExpressionValidator
并具有以下 3 个约束条件:
- 不能以空开头space
^[\S]
- 不能以你好开头
^(?!Hello).+
- 不能以空结尾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+ 次任何字符,换行符和非空白字符除外
$
字符串结束
我需要制作一个 QLineEdit
和 QRegularExpressionValidator
并具有以下 3 个约束条件:
- 不能以空开头space
^[\S]
- 不能以你好开头
^(?!Hello).+
- 不能以空结尾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+ 次任何字符,换行符和非空白字符除外$
字符串结束