2016-04-27 3 views
1

Ich möchte einen regulären Ausdruck, der Phrasen innerhalb einer größeren Zeichenfolge mit "st" beginnt. Es muss case insensitive sein und durchsucht die ganzen Strings und gibt mir die Anzahl der Matches zurück.Wie bekomme ich einen regulären Ausdruck, der mit dieser Phrase beginnt?

Was ich habe:

/st+/ig 

Ich teste es auf:

st stuff pistuff stuff 
stuff st st st st stuff notstuff 
STUFF STUFF STUFF 
sti 
stiiiiii 
stiiii 
stufff 
stiufff 

Es passt fast alles richtig, außer es auch pistuff und notstuff aufgreift wird.

+1

Starten Sie die Regex mit '^' zu * Anker * es zu Beginn des Test-String. – Pointy

+1

Ich habe das versucht und es gibt mir nur ein Ergebnis. Ich möchte es am Anfang der Wörter, nicht die Zeichenfolge. – munchschair

+0

Verwenden Sie '\ b', wie ich in meiner Antwort angegeben habe. – timolawl

Antwort

3

Aktualisiert Worte zu erfassen, die mit st oder einfach die beiden Zeichen beginnen st, Groß- und Kleinschreibung:

  • Für ganze Wortspiele: /\bst\w*/ig
  • Für Spiele, ohne dass ganzes Wort entsprechen: /\bst/ig

\b wird verwendet, um eine Wortgrenze zu markieren. Auch

var strArr = [ 
 
    'st stuff pistuff stuff', 
 
    'stuff st st st st stuff notstuff', 
 
    'STUFF STUFF STUFF', 
 
    'sti', 
 
    'stiiiiii', 
 
    'stiiii', 
 
    'stufff', 
 
    'stiufff' 
 
]; 
 

 
var re = /\bst\w*/ig; 
 
var count = 0; 
 

 
strArr.forEach(function(str) { 
 
    count += str.match(re).length; 
 
    document.body.insertAdjacentHTML('beforeend', str.match(re) + '<br>'); 
 
}); 
 

 
document.body.insertAdjacentHTML('beforeend', 'count: ' + count);

, Regex101

+1

Ich denke du willst wahrscheinlich'/(?: \ bst) +/'- dein' + 'passt zu einem oder mehreren' t' Zeichen :) – Pointy

+0

Ah ja .. . :) Ich werde das bearbeiten. – timolawl

+0

Es macht keinen Sinn, eine nicht erfassende Gruppe zu verwenden, wenn sie eine einzige obligatorische Verzweigung gruppiert. Es behindert nur die Regex-Ausführung. Das '+' in der OP-Regex war ein Tippfehler. –

Verwandte Themen