Das ^(?!.*Foo). Bar*$
Muster matchersd eine Zeichenfolge, die Täter nicht Foo
irgendwo in haben, und das beginnt mit einem beliebigen Zeichen, sondern eine neue Zeile, gefolgt mit einem Leerzeichen und dann endet mit Ba
+ null oder mehr r
s. Ich bezweifle, dass du diese Regex im wirklichen Leben brauchst.
Sie können es mit einer Callback-Methode innerhalb einer replace
Methode mit einem bekannten Regex-Trick zu entsprechen, was Sie nicht zuerst brauchen, und dann übereinstimmen und erfassen, was Sie brauchen.
Siehe this regex:
\bFoo Bar\b|(\bBar\b)
^--match--^ ^-capture-^
ich die Worte mit Wortgrenzen eingewickelt, könnte man sie verwerfen, wenn Sie Sie suchen nicht Wort Zeichen am Anfang/Ende der Saiten haben.
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;
So ist es JavaScript? Was ist dein letztes Ziel? Erhalten Sie alle Übereinstimmungen oder ersetzen Sie sie durch etwas anderes? Siehe https://regex101.com/r/mU9wC3/1 –
@ WiktorStribiżew richtig, JavaScript - müssen alle Vorkommen von Bar mit Foo Bar ersetzen, wobei bestehende Single-Bar unberührt bleiben. – Oleg
Ich weiß, wie man es in 3 Schritten macht (ohne RegExp). Will es einfach mit RegExp machen. – Oleg