有一个文件包含大量“lore ipsum Bar lore ipsum”和“lorem ipsuem Foo Bar lorem ipsuem”
如何通过正则表达式获取所有出现的 Bar
而没有 Foo
(忽略所有“Foo Bar”,选择“Bar”)?
类似于:
^(?!.*Foo)。酒吧*$
??
请您参考如下方法:
^(?!.*Foo)。 Bar*$
模式匹配器是一个内部没有 Foo
的字符串,并且以除换行符之外的任何字符开头,后跟一个空格,然后以 Ba
+ 零个或多个 r
。我怀疑你在现实生活中是否需要这个正则表达式。
您可以使用 replace
方法中的回调方法来完成此操作,使用已知的正则表达式技巧首先匹配您不需要的内容,然后匹配并捕获您需要的内容。
参见this regex :
\bFoo Bar\b|(\bBar\b)
^--match--^ ^-capture-^
我用单词边界包裹了单词,如果您搜索的字符串的开头/结尾没有单词字符,您可能会丢弃它们。
var re = /\bFoo Bar\b|(\bBar\b)/g; // Declare the regex
var str = 'lore ipsum Bar lore ipsum\nlorem ipsuem Foo Bar lorem ipsuem';
var subst = '<b>Foo Bar</b>'; // A sample substitution
var result = str.replace(re, function($0, $1) { // Use the anonymous method
return $1 ? subst : $0; // If Group 1 matches, use a subst, else, reinsert the match back
});
document.body.innerHTML = result;