假设我有一个标签对象:
var getMouseOnCircle = ( function () {
var vector = new THREE.Vector2();
return function getMouseOnCircle( pageX, pageY ) {
vector.set(
( ( pageX - _this.screen.width * 0.5 - _this.screen.left ) / ( _this.screen.width * 0.5 ) ),
( ( _this.screen.height + 2 * ( _this.screen.top - pageY ) ) / _this.screen.width ) // screen.width intentional
);
return vector;
};
}() );
我希望能够使用正则表达式匹配“失败”但排除“警告 - 错误 - 致命 - 失败 - 异常 - 确定”。
所以在上面的例子中,如果我使用我的正则表达式搜索失败,它应该只匹配parsefailure上的失败而忽略其余的。
如何使用正则表达式实现这一目标?
注意:正则表达式必须排除整个字符串“warn-error-fatal-failure-exception-ok”
答案 0 :(得分:1)
修改强>
在记录下面的答案后,我意识到你正在寻找的可能是:
(?<!warn-error-fatal-)failure(?!-exception-ok)
所以我在这里添加它,以防它适合你想要的更好。这个正则表达式只是在寻找&#34;失败&#34;但使用Negative Lookbehind和Negative Lookahead来指定&#34;失败&#34;可能不会出现&#34; warn-error-fatal - &#34;或者后跟&#34; -exception-ok&#34;。
从评论中发展出来的答案:
以下正则表达式捕获了&#34;失败&#34; &#34; parsefailure&#34;中的子字符串标记,它将它放在第1组:
^.*"(?![^"]*warn-error-fatal-failure-exception-ok[^"]*)[^"]*(failure)[^"]*".*$
DETAIL
我将打破部分正则表达式,我将解释每一个。首先,让我们忘记第一组括号之间的所有内容,让我们看看其余的内容。
^.*"[^"]*(failure)[^"]*".*$
正则表达式的重要部分是我们试图在小组中捕获的内容,即&#34;失败&#34;它本身是由双引号包围的标签的一部分。上面的正则表达式匹配整个测试字符串,但它侧重于由双引号括起来并包含子字符串的标记&#34;失败&#34;。
^.*"
匹配从字符串开头到引号的任何字符
"[^"]*(failure)[^"]*"
匹配由双引号括起并包含子字符串&#34;失败&#34;的标记。从字面上看:双引号,后跟零或多个不是双引号的字符,接着是&#34;失败&#34;,后跟零个或多个不是双引号的字符,后跟双引号。括号中包含“&#34;失败&#34;在第1组中。
".*$
匹配双引号到测试字符串末尾的任何字符
因为[^"]*(failure)[^"]*
匹配包含子字符串的所有标记&#34;失败&#34;,^.*"[^"]*(failure)[^"]*".*$
将捕获子字符串&#34;失败&#34;从包含字符串的第一个标签。换句话说,它将捕获&#34;失败&#34;来自warn-error-fatal-failure-exception-ok
标记,这不是我们想要的,因此我们大多数排除warn-error-fatal-failure-exception-ok
标记与正则表达式的标记部分匹配:[^"]*(failure)[^"]*
。这是通过Negative Lookahead:
(?![^"]*warn-error-fatal-failure-exception-ok[^"]*)
此Negative Lookahead基本上意味着:&#34; Negative Lookahead后面的正则表达式无法与[^"]*warn-error-fatal-failure-exception-ok[^"]*
&#34;匹配。 (?!
和)
只是语法的一部分。您可以阅读更多相关信息here。
更加突破
^
匹配测试字符串的开头
.*
匹配任何字符零次或多次
"
匹配双引号字符
[^"]*
匹配双引号字符以外的任何字符零次或多次
(failure)
匹配&#34;失败&#34;,因为它在括号中,它将在一个组中捕获它;在这种情况下,它将在组1中捕获,因为只有一组捕获括号。负面前瞻的括号是无法捕捉的。
$
匹配测试字符串的结尾
答案 1 :(得分:0)
RegularExpression:[A-Za-z-]*(?<!("warn-error-fatal-))failure
识别parsefailure和“syslog-warn-error-fatal-failure-exception-ok”而不是其他失败。