2016-08-30 3 views
2

Ich frage vielleicht eine dumme Suche, aber ich würde wirklich gerne wissen, ob es dort einen regulären Ausdruck gibt, um nur den ersten passenden Buchstaben aus einer Zeichenfolge zu erhalten? Beispiel:Regex zum Speichern von nur einem passenden Element in einem String-js

var string = "abcdaeee"; 
var value = 'a'; 

Der Wert und das String-Feld sind dynamisch und können daher variieren. In obigem Fall bin ich bereit, nur den ersten passenden Brief an den var ‚value‘ gefunden zu bekommen in der string.I zur Zeit haben diese regex (das ‚a‘):

regex = new RegExp("(" + value + ")", "i"); 
string.match(regex) 

stattdessen kann ich etwas wie: o/p: a,

string.match(someValidRegex)// to o/p: a 

aber diese bekommt alle passenden A's aus der Zeichenfolge. Gibt es im Regex eine Möglichkeit, nur das erste Auftreten eines passenden Elements anzuzeigen? ZB o/p: ["a"]

Vielen Dank!

+0

können Sie Code zeigen, die tatsächlich etwas tut? Du hast 3 Variablen erstellt und nichts mit ihnen im obigen Code gemacht - dh der Code, den du gepostet hast, gibt nichts aus, geschweige denn, was du behauptet hast, dass er es ausgibt –

+0

Es zeigt '['a', 'a']' weil du benutzte '()' Gruppe. Ändern Sie die Klammern in '[]', sodass nur der erste Buchstabe in der _character-Klasse_ zurückgegeben wird. Allerdings könnten Sie die "Wert" Zeichen –

+0

@ Jaromanda X entkommen: editiert Code oben und hier ist die Geige: https: //jsfiddle.net/mbbrzqef/4/ – sarah

Antwort

0

Alternativ, wenn möglich, diese Arbeit, zwei reguläre Ausdrücke verwenden könnten. Eine, um die Zeichenfolge zu extrahieren, und die andere, um die extrahierte Zeichenfolge zu analysieren, um Ihren Charakter oder was auch immer zu erhalten.

var str = "blah blah blah something blah blah blah"; 

var matched = str.match(/something/); 
var character_matched = matched[0].match(/e/); 

Die Variable character_matched sollte jetzt Ihren Brief enthalten. Sie können "etwas" in der Zeile var matched und "e" in der Zeile var character_matched ändern, um Ihren Bedürfnissen zu entsprechen. Meine Frage ist jedoch: Was extrahieren Sie gerade das Zeichen in einem bestimmten Wort/String?

Wenn Sie eine Regex mehr als einmal gefunden haben, überprüfen Sie, ob Sie Globals aktiviert haben.


Alternativ:

var str = "hello"; 
var letter = "p"; 
var exists = str.search(letter); 
if (exists != -1) 
{ 
    # character is in the string, do something 
} 
else 
{ 
    # character not in string, do something else 
} 
+0

nicht sicher, ob ich dich richtig verstanden habe..das ist was ich versuchte .. https://jsfiddle.net/mbbrzqef/1/ Ich versuche, nur den ersten Buchstaben zu extrahieren, damit ich kann übereinstimmendes Zeichen auf Suchzeichenkette hervorheben ... – sarah

+0

hat vergessen, dass es ein Array zurückgibt. Hier funktioniert es: https: // jsfiddle.net/znee7nL7/ Und die Str ist der größere Satz (Ich dachte, Sie suchten nach einer Zeichenfolge in einem Satz, dann ein Zeichen in der Zeichenfolge). Wenn es so einfach ist, nur nach einem Charakter zu suchen, könnten Sie eine Modifikation von Eoghan_Mulcahys Antwort verwenden. Ich werde gleich ein Beispiel schreiben. –

1

Apologies dies die Lösung für die erste abgestimmte Brief ist nicht regex

Wenn Sie nur den ersten angepaßten Buchstaben einer Zeichenfolge erhalten möchte ich denke, dass regex ein bisschen übertrieben ist.

würde

function getFirstMatchedLetter(str,letter){ 
     var letterPosition = str.search(letter); 
     return str.charAt(letterPosition); 
    } 

    getFirstMatchedLetter("hello","l"); 
+0

Das OP versucht, die erste ** übereinstimmende ** Brief, nicht der erste Brief. – dorukayhan

+0

Ich möchte nicht den ersten Buchstaben der Zeichenfolge, der Buchstabe sollte den angegebenen Wert entsprechen, zB: value = 'l', sollte es o/p: ["l"] stattdessen ["l", "l"] – sarah

+0

@sarah ich habe die Antwort umgeschrieben –

Verwandte Themen