好吧,我用 JavaScript 处理一些行,并且想要使用否定前瞻来消除该行(如果它包含特定短语),但我似乎仍然捕获这些行,并且 regexbuddy 和其他人显示它匹配,我不确定为什么
^This (\w+) (\w+) was built in (\d+). (.+?).(?! This car has a salvage title.)$
所以我需要获取一些不同的第二句值,这些值会发生变化以匹配 (.+?)。 我不想要的是该行是否包含对抢救标题的引用
所以
This Honda Accord was built in 1986. This car has 3 accidents. This car has a salvage title.
不应该匹配,因为否定前瞻应该失败
但是
This Honda Accord was built in 1986. This car has 3 accidents.
应该匹配,但我在两者上都得到了匹配。我只是误解了负面的展望还是我错误地格式化了它?
最佳答案
…(?! This car has a salvage title.)$
您已将否定前瞻放在字符串末尾之前。它总是不匹配(即成功)。毕竟这是向前查找,而不是向后查找,并且在字符串末尾查看是没有意义的。
您可能想这样做:
^This (\w+) (\w+) was built in (\d+)\. (?!This car has a salvage title)(.+?)\.$
这里,(?!This car has a salvage title)(.+?)
确实与点之前的句子(准确地说,至少一个字符)匹配,该句子不以短语“这辆车有报废权”。或者,如果您不想在第一句之后的任何地方使用该短语,则使用
^This (\w+) (\w+) was built in (\d+)\. (?!.*?This car has a salvage title)(.+?)\.$
// ^^^
关于JavaScript REGEX 负向前瞻混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25779470/