2016-08-01 7 views
-1

ich einen Rich-Text habe wieRegulärer Ausdruck entspricht das Wort, aber das Wort nicht in anderen Saiten

Sample text for testing:<a href="http://www.baidu.com" title="leoshi">leoshi</a>leoshi for details balala... 
Welcome to RegExr v2.1 by gskinner.com, proudly hosted by Media Temple! 

Was ich will, ist das Wort Übereinstimmen leoshi, aber nicht innerhalb von <a> Elementen, also in diesem Beispiel es ist nur leoshi in leoshi for details....

Lösung und Erklärung sind willkommen!

Antwort

0

Ich verwendete einen positiven Lookbehind, um das Spiel zu starten NACH der schließende Tag </a>. Und dann passte leoshi mit Klammern, wenn es als ein separates Wort verwendet wird.

Regex: (?<=<\/a>).*?\b(leoshi)

DEMO

+0

nicht übereinstimmen wenn das 'leoshi' vor einem' 'steht: https://regex101.com/r/ rM4eQ9/3 –

+0

ja, etwas wie https://regex101.com/r/rM4eQ9/5 – LeoShi

+0

@LeoShi Jetzt prüfen. –

-1

Der beste Ansatz (mit Regex) wäre zunächst alle Tags zu entfernen, dann das Wort in dem restlichen Zeichenfolge erkennen. Zum Beispiel:

var str_without_links = str.replace(/<a\b.*?<\/a>/, '') 
str_without_links.match(/leoshi/) 

Wenn Sie die Stringlänge (für die Korrespondenz mit der ursprünglichen Zeichenfolge) beibehalten müssen, sollten Sie Platzhalter-Zeichen anstelle des Original-Tag verwenden.

var str_without_links = str.replace(/<a\b.*?<\/a>/, function(s) { return s.replace(/./g, ' ') }) 
+0

niemand, wir können solche Dinge nicht tun. Dieser Ansatz wird den ursprünglichen Text zerstören. – LeoShi

+0

'' 'ersetzen' '' gibt eine Kopie zurück, das Original ist intakt. Wenn Sie den ursprünglichen Text beibehalten müssen (z. B. um den korrekten Index des übereinstimmenden Texts zu ermitteln), müssen Sie stattdessen jedes übereinstimmende Zeichen durch einen Platzhalter ersetzen. Ich werde meine Antwort bearbeiten, um ein Beispiel hinzuzufügen. – Owen

0

Ein Trick so zu handhaben sollen „ein Wort finden, aber keine spezifischen Kontext“ Fälle ist hier beschrieben: http://www.rexegg.com/regex-best-trick.html.

Im Wesentlichen ist es: passen Sie Ihr Wort im unerwünschten Kontext oder (mit Alternation) nur dieses Wort aber in einer Erfassungsgruppe. Dann analysieren Sie die Aufnahmen.

Die Regex würde in Ihrem Fall sein:

<a.*?>.*leoshi.*<\/a>|(leoshi) 

Demo: https://regex101.com/r/zO0tV2/1

Dann müssen Sie Aufnahmen überprüfen:

var input = "..."; 
var pattern = /<a.*?>.*leoshi.*<\/a>|(leoshi)/; 
var match = pattern.exec(input); 
var inputMatches = match !== null && match[1] !== null; 

Demo: https://ideone.com/KkAl2I

Verwandte Themen