Op basis van dit antwoord
Reguliere expressies: is er een AND-operator?
Ik heb het volgende geprobeerd op http://regexpal.com/maar kreeg het niet werkend. Wat mis ik? Ondersteunt javascript het niet?
Regex: (?=foo)(?=baz)
String: foo,bar,baz
Antwoord 1, autoriteit 100%
Het is onmogelijk dat zowel (?=foo)
als (?=baz)
tegelijkertijd overeenkomen. Het volgende teken zou dan zowel f
als b
moeten zijn, wat onmogelijk is.
Misschien wil je dit in plaats daarvan:
(?=.*foo)(?=.*baz)
Hier staat dat foo
overal moet verschijnen en baz
overal moet verschijnen, niet noodzakelijk in die volgorde en mogelijk overlappend (hoewel overlap in dit specifieke geval niet mogelijk is omdat de letters zelf overlappen elkaar niet).
Antwoord 2, autoriteit 21%
Voorbeeld van een Boolean (AND) plus Wildcard-zoekopdracht, die ik gebruik in een javascript Autocomplete-plug-in:
Overeenkomende tekenreeks: "my word"
Tekenreeks om te zoeken: "I'm searching for my funny words inside this text"
Je hebt de volgende regex nodig: /^(?=.*my)(?=.*word).*$/im
Uitleggen:
^positie bevestigen aan het begin van een regel
?=Positieve vooruitzichten
.*komt overeen met elk teken (behalve nieuwe regel)
()Groepen
$positie bevestigen aan het einde van een regel
imodifier: ongevoelig. Hoofdletterongevoelige overeenkomst (negert hoofdletters van [a-zA-Z])
mmodifier: meerdere regels. Zorgt ervoor dat ^ en $ overeenkomen met het begin/einde van elke regel (niet alleen het begin/einde van de tekenreeks)
Test de Regex hier: https://regex101.com/r/iS5jJ3/1
U kunt dus een javascript-functie maken die:
- Vervang door regex gereserveerde tekens om fouten te voorkomen
- Spreek je string op met spaties
- Voeg uw woorden toe in regex-groepen
- Maak een regex-patroon
- Voer de regex-overeenkomst uit
Voorbeeld:
function fullTextCompare(myWords, toMatch){
//Replace regex reserved characters
myWords=myWords.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
//Split your string at spaces
arrWords = myWords.split(" ");
//Encapsulate your words inside regex groups
arrWords = arrWords.map(function( n ) {
return ["(?=.*"+n+")"];
});
//Create a regex pattern
sRegex = new RegExp("^"+arrWords.join("")+".*$","im");
//Execute the regex match
return(toMatch.match(sRegex)===null?false:true);
}
//Using it:
console.log(
fullTextCompare("my word","I'm searching for my funny words inside this text")
);
//Wildcards:
console.log(
fullTextCompare("y wo","I'm searching for my funny words inside this text")
);
Antwoord 3
Misschien is alleen een OR-operator |
voldoende voor uw probleem:
String: foo,bar,baz
Regex: (foo)|(baz)
Resultaat: ["foo", "baz"]
Antwoord 4
Misschien ben je op zoek naar zoiets. Als u de volledige regel wilt selecteren wanneer deze zowel “foo” als “BAZ” tegelijkertijd bevat, zal deze regex eraan voldoen:
.*(foo)+.*(baz)+|.*(baz)+.*(foo)+.*