2 Stimmen

Wie erstellt man einen regulären Ausdruck, der ein Wort mit einem zufällig eingefügten Zeichen übereinstimmt?

Hey alle zusammen, ich möchte einen regulären Ausdruck verwenden, um ein Wort mit einem bestimmten zufällig platzierten Zeichen abzugleichen. Ich möchte auch die Zeichen dieses "Basis"-Wortes in ihrer ursprünglichen Reihenfolge belassen.

Zum Beispiel mit dem "Basis"-Wort test und dem bestimmten Zeichen 'y', möchte ich, dass der reguläre Ausdruck nur folgendes abgleicht: ytest, tyest, teyst, tesyt, testy

Falls es relevant ist, arbeite ich mit JavaScript und verwende das Dojo Toolkit.

Vielen Dank!

3voto

Martin Smith Punkte 417623

Muss es Regex sein? Wenn nicht, funktioniert das?

function matches(testWord, baseWord)
{
    for (var i =0; i < testWord.length; i++)
    {
    if(testWord.substr(0,i) + testWord.substr(i+1,testWord.length- i) == baseWord)
        return true;
}

return false;
}

0voto

Tim Pietzcker Punkte 311448

Ich glaube, dass du dies nicht mit einem einfachen regulären Ausdruck tun kannst, es sei denn, du schreibst es explizit aus - aber \b(ytest|tyest|teyst|tesyt|testy)\b ist wahrscheinlich nicht das, was du im Sinn hattest.

Die nächstbeste lösung basierend auf Regex wäre zuerst

\b(y)?t(y)?e(y)?s(y)?t(y)?\b

zu matchen und dann programmatisch zu argumentieren, dass nur eine der fünf Gruppen tatsächlich etwas gefunden hat.

Letztendlich bist du wahrscheinlich besser dran mit einer Nicht-Regex Lösung. Obwohl ich gerne eines Besseren belehrt werden würde.

0voto

kennebec Punkte 98551

In diesem können Sie eine Zeichenklasse verwenden, wie eine beliebige Zahl(/d) oder einen Bereich von Buchstaben ([xyz]), wenn Sie der Funktion einen regulären Ausdruck für das dritte Argument übergeben.

function matchPlus(string, base, plus){
    string= string.split(plus);
    return string.length== 2 && string.join('')== base;
}

//Testfall
var tA= 'ytest,tyest,teyst,test,ytesty,testyy,tesyt,testy'.split(','), L= 8;
while(L){
    tem= tA[--L];
    tA[L]= tem+'= '+!!matchPlus(tem,'test','y');
}

alert(testA.join('\n'))

/*  returned value: (String)
ytest= true
tyest= true
teyst= true
test= false
ytesty= false
testyy= false
tesyt= true
testy= true
*/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X