Javascript Text durchsuchen nach 2 Wörtern?
Würde gerne einen Text nach 2 Wörtern durchsuchen, Ausgabe sollte nur erfolgen, wenn diese 2 Wörter im Text sind und nicht wenn nur eines der beiden im Text ist, Anordnung der Wörter ist egal...
words = ["blabla\\s+.*blubbblubb"],
weiß einer wo mein fehler ist?
Danke schonmal
eigtl soll das Skript auf einer Seite nach bestimmten Wörtern suchen und wenn es eines dieser Wörter findet melden..
Mein Problem ist quasi, das ich keine Ahnung habe, wie ich wirklich deklarieren kann, dass er nur meldet, wenn exakt diese Wörter auftauchen..
// ==/UserScript==
/*globals $*/
let refresh_rate = 50000, //Refresh rate when any searched item isn't found
timeout = 18000, //If an error occurs, the page will be guaranteed to be refreshed within this time.
words = [
"markus,
"gerhard",
"berghütte Zillertal",
"Privat\\s+.*Berchtesgaden",
"Hotel\\s+.*suite"
],
Also markus und Gerhard sind klar...aber dann...
Nur melden, wenn exakt berghütte Zillertal auftaucht
oder wenn in dem Text privat und danach irgendwo auch Berchtesgaden auftaucht...
Und die liste nach zu suchenden begriffen sollte nach Möglichkeit einfach erweitert werden können...
4 Antworten
Mit deiner Codezeile definierst du ein Array, welches einen String als Eintrag enthält. Das ist m.E. erst einmal unnötig. Offensichtlich soll der String einen regulären Ausdruck darstellen. Der kann aber schon allein aus dem Grund, dass die Reihenfolge der Vorkommen der beiden gesuchten Wörter egal sein soll, nicht passen.
Den Text eines HTML-Dokuments solltest du so bekommen:
const content = document.getElementsByTagName("body")[0].innerText;
Allerdings ist der Zeitpunkt dieses Aufrufs entscheidend, denn es könnten ja auch noch nachträglich Texte in die Webseite geladen werden.
Statt einen regulären Ausdruck zu benutzen, würde ich den Text anhand von Whitespaces (und Satzzeichen) auftrennen.
words = content.split(/[\s,\!\?\.]+/);
Wohlgemerkt: Diese Liste an Satzzeichen ist noch nicht vollständig. Auf Anhieb fielen mir da noch etliche andere ein (Anführungszeichen, Semikolons, Doppelpunkte, ...).
Danach solltest du eine Wörterliste haben, die du auf deine beiden Wörter prüfen kannst.
if (words.includes("your first word ...") && words.includes("your second word ...")) {
// do something ...
}
Eine andere Möglichkeit wäre eine Suche mit indexOf:
const startPosition = content.indexOf("some searchword ...");
if (startPosition !== -1) {
// ...
Um allerdings auszuschließen, dass der Fund kein Wortbestandteil ist, müssten die umliegenden Zeichen (die Zeichen direkt vor und nach dem Fund) geprüft werden. Es dürfte sich nicht um Bindestriche oder Buchstaben handeln. Vermutlich gibt es noch etliche andere Fälle.
Um den Aufwand nicht zu übertreiben, wäre es sinnvoll, die zu untersuchenden Texte im Voraus ein wenig zu analysieren: Welche Fälle sind zu erwarten und welche können ignoriert werden?
Hier mal einfach String match missbraucht
<html>
<head>
</head>
<body>
<script>
String.prototype.match = function(words) {
for (var i = 0; i < words.length; i++) {
if (this.indexOf(words[i]) === -1)
return false;
}
return true;
}
var telefon = "Hallo wie gehts Dir mein Kücken";
var works = ["Hallo","wie"];
if ( telefon.match(works)) {
console.log("Yes");
} else {
console.log("No");
}
var works = ["Hallo","OK"];
if ( telefon.match(works)) {
console.log("Yes");
} else {
console.log("No");
}
</script>
</body>
</html>
Danke, aber der text der durchsucht werden soll ist eine website
z.b.
function containsAll(toSearch, words) {
for (var i = 0; i < words.length; i++) {
if (toSearch.indexOf(words[i]) === -1)
return false;
}
return true;
}
//Aufruf:
if (containsAll("Hallo Welt", [ "Hallo", "Welt", "Test"] ))
gefunden
hindert dich doch keiner deinen perfekten code zu antworten , aber du nörgelst nur lol . warscheinlich wurdest du von deinem chef auch einfach so vollgerotzt . hört sich gut an , klingt professionel und entspricht irgendwelchen standards lol .
hat aber überhaupt kein inhalt zum aktuellen kontext . lol
Du scheinst echt nicht zu verstehen, was an deinem Code falsch ist, kann das sein?
Schon mal an Überlappungen gedacht?
Nicht berücksichtigte Überlappungen sind eine der Top-Ursachen für Sicherheitslücken.
Aber deine bisherigen Antworten sind alle auf dem Niveau. Besonders die, zu C++. Naja, egal ... Pfusch mal ruhig weiter!
Was hat da ein falscher regulärer Ausdruck in den eckigen Klammern verloren?
Mach es dir einfach mit contains
Ja ich mach nicht viel mit JS, sonst heißt es fast immer contains ^^
gibt kein contains bei javascript
Schon bevor ich mir den Fragetext durchgelesen habe, war mir klar, dass jemand so einen fehlerhaften Code schreiben wird.
Leute, schlampt nicht so! Das Testen auf Grenzfälle ist das Mindeste, was man erwarten darf!