Ich habe ein Javascript, das Hashtags und Erwähnungen erkennen und ersetzen soll. Ich verwende diese Bibliothek: https://github.com/AnSavvides/jquery.linky

function _linkifyHashtags(text, links) {
    // If there is no search URL for a hashtag, there isn't much we can do
    if (links.hashtagSearchUrl === null) return text;
    return text.replace(/(^|\s|\(|>)#((\w|[\u00A1-\uFFFF])+)/g, "$1<a href='" + links.baseUrl + links.hashtagSearchUrl + "$2' target='_blank'>#$2</a> ");
}

Das Problem mit diesem Code ist, dass regEx nur funktioniert, wenn Hashtags mit Leerzeichen davor geschrieben wurden (wie: "#hi #hello #lo")

Wenn die Hashtags zuvor ohne Leerzeichen geschrieben wurden, wie z. B. "# hi # hello # lo", erkennt das Skript die Hashtags nicht.

Ich habe zuvor versucht, mögliche nicht weiße Zeichen hinzuzufügen:

/(^|\s|\S|\(|>)#((\w|[\u00A1-\uFFFF])+)/

Es funktioniert "auf halbem Weg". Plötzlich wird jedes zweite Hashtag ohne Leerzeichen vom Skript erkannt.

Ich bin kein RegEx-Experte und habe versucht, mich darüber zu informieren, aber ich kann nicht sehen, wie ich diesen Teil richtig machen kann. Wer weiß?

1
JoakimB 12 Aug. 2015 im 15:35

3 Antworten

Beste Antwort

Entfernen Sie einfach die Einschränkung, was einem Tag vorangehen kann, da nichts jetzt auch eine gültige Alternative ist.

/#((\w|[\u00A1-\uFFFF])+)/g

Sie sollten es auch entsprechend aus dem Ersatz entfernen, um Folgendes zu vereinfachen:

return text.replace(/#((\w|[\u00A1-\uFFFF])+)/g, "<a href='" + links.baseUrl + links.hashtagSearchUrl + "$1' target='_blank'>#$1</a> ");
3
ndnenkov 12 Aug. 2015 im 12:50

Hey, versuche diesen regulären Ausdruck.

/(\s|\w)*[\#][\w]*/g

Regex Geige

0
Sevle 3 März 2016 im 12:59

Versuche dies :

/(^|\s?|\(|>)#((\w|[\u00A1-\uFFFF])+)/

Das ? after \ s fängt 0 oder 1 Leerzeichen.

2
LzyPanda 12 Aug. 2015 im 12:42