2017-02-24 5 views
0

Ich habe diese regexRegex nicht Zeichen bekommen

\.*?\{\{([\w\s]+)\|([\w\s]+)\}\} 

und es fängt das Wort wie das richtig:

{{58afc8ed3688d3001cb8b043_1487915885599|data}} 

Aber wenn ich legte ein Wort wie dieses

{{58afc8ed3688d3001cb8b043_1487915885599|data?}} 

es schlägt fehl, es zu erfassen.

Wie soll ich das später erfassen?

Antwort

2

können Sie versuchen, die folgenden regex:

.*?\{\{([\w\s]+)\|(.*?)\}\} 

demo siehe

+0

Es funktioniert nicht in meiner ersetzen Funktion in Javascript – kohli

+0

@kohli überprüfen aktualisierte Antwort – m87

0

\.*?\{\{([\w\s]+)\|([\w\s?]+)\}\} sollte es tun. \w\s wird kein Fragezeichen bekommen.

+0

Zeigen Sie was, wenn ich andere Zeichen dort setzen – kohli

+0

Wissen Sie, welche Zeichen im Voraus? Wenn Sie dies tun, platzieren Sie diese auch zwischen den letzten eckigen Klammern. Wenn Sie dies nicht tun, brauchen Sie '. *', Um eine Übereinstimmung zu garantieren. Wenn Sie alles außer Leerzeichen möchten, versuchen Sie '\ S'. –

2

Der einzige Unterschied zwischen Ihren beiden Beispielen ist, dass Sie ein zusätzliches '?' Zeichen in (oder nach) der zweiten Gruppe.

siam 's Antwort ist richtig, aber wird in einer sehr breiten Übereinstimmung resultieren, die nicht sein könnte, was Sie wollen. Im Extremfall könnte man den ganzen Regex durch \{\{(.*)\|(.*)\}\} ersetzen, wenn man wollte.

Unter der Annahme, es ist nur ein Fragezeichen Sie besorgt sind, könnten Sie:

  • , dass überall von in Ihrer Gruppe ([\w\s]+) zu Ihrem akzeptablen Zeichen in den ([\w\s?]+)
  • fügen Sie es explizit auf das Ende erstreckt , von Ihre Gruppe ([\w\s]+) mit ([\w\s]+\?*) (die erlauben Null oder eine beliebige Anzahl von Hinterfragezeichen wird)
  • fügen sie es nach demersetzenGruppe, wenn Sie es nicht kümmern uns um die Erfassung mit ([\w\s]+)\?*

Natürlich, wenn Sie andere Sonderzeichen zu akzeptieren bedeutet, als nur das Fragezeichen Sie einfach halten können sie auf die gleiche Weise hinzufügen.

+0

Danke ich verstehe jetzt das Konzept dahinter – kohli