例如,我有一些类似的表达
expression1
expression2 expression3
我想匹配" expression2 expression3"在正则表达式中,如果"表达式1"不是一个不需要的字符串(让我称之为不需要的字符串。)。所以,它应该是这样的:
unwanted
expression2 expression3 // Not Matched...
string
expression2 expression3 // Matched...
我该怎么做?我尝试过这样的事情:
(?!unwanted\n)(expression2)[ ]+(expression3)
但它不起作用。可能是什么问题?
提前致谢...
答案 0 :(得分:0)
将不需要的字符串捕获到组1中,并检查它是否为未定义。如果是,则没有不需要的文本,您可以抓住该匹配,否则,丢弃它:
var regex = /(unwanted\n)?(expression\d+)\s+(expression\d+)/g;
var str = "unwanted\nexpression2 expression3\n\nstring\nexpression4 expression5";
var res = [], m;
while ((m = regex.exec(str)) !== null) {
if (m[1] === undefined) res.push(m[0]);
}
console.log(res);

答案 1 :(得分:0)
也许你可以从中解决这个问题:
(?!unwanted.*)(?:^.{1,8}).*\s*(expression2 expression3)
基本上,它确保表达式前面至少有unwanted
中的字符数,不是 unwanted
。
如果您只想要表达式,您将在捕获组1中获取它们。
编辑:看着这个,我意识到它可能充满了警告,但它可能会让你开始。 (虽然现在看不到;)
编辑2:替代方案(我相信更好)需要某些,但不允许不需要的在以前的任何地方:
^(?!.*unwanted.*).+[\r\n](expression2 expression3)