Abbina l'intera stringa


165

Qual è l'espressione regolare (in JavaScript se è importante) per abbinare solo se il testo è una corrispondenza esatta? Cioè, non dovrebbero esserci caratteri extra all'altra estremità della stringa.

Ad esempio, se sto cercando di abbinare per abc, poi 1abc1, 1abce abc1sarebbe non corrispondere.


5
Per i nuovi arrivati ​​su regex, ci sono due buone risposte a questo, a seconda di ciò che stai cercando. L'asker vuole davvero \babc\b, il che consentirebbe ad esempio 123 abc 123di corrispondere per abc(ma non per gli esempi negativi come nella domanda); tuttavia, ^abc$si assicurerà che asia all'inizio della stringa e calla fine, altrimenti non corrisponderà.
Andrew,

Risposte:


305

Utilizzare i delimitatori di inizio e fine: ^abc$


3
@Jake, sono contento di come ha funzionato la risposta, ma penso che dovresti notare che funzionerà solo quando solo abc è l'unico elemento nella stringa. Ad esempio, non corrisponderebbe "le prime 3 lettere dell'alfabeto sono abc"
matchew

Questo ha funzionato per me, forse il mio esempio avrebbe dovuto essere "abc def ghi" come obiettivo della partita.
Jake Pearson,

@Jake se la tua stringa fosse "abc def ghi" allora / ^ abc $ / non funzionerebbe. es: jsfiddle.net/XUyAc
matchew,

2
Lo capisco, se voglio abbinare "abc def ghi" il mio regex sarebbe^abc def ghi$
Jake Pearson,

2
Nota: per fare in modo che uno schema con alternanze corrisponda a un'intera stringa, potrebbe essere necessario avvolgerlo con un gruppo (non) acquisito: /^(?:abc|def)$/oppure /^(abc|def)$/. Altrimenti, se il gruppo non viene utilizzato, /^abc|def$/corrisponderà abcall'inizio della stringa OPPURE defalla fine della stringa.
Wiktor Stribiżew,

40

Dipende. Potresti

string.match(/^abc$/)

Ma ciò non corrisponderebbe alla seguente stringa: 'le prime 3 lettere dell'alfabeto sono abc. non abc123 '

Penso che vorresti usare \b(confini di parole):

var str = 'the first 3 letters of the alphabet are abc. not abc123';
var pat = /\b(abc)\b/g;
console.log(str.match(pat));

Esempio live: http://jsfiddle.net/uu5VJ/

Se la soluzione precedente funzionasse per te, sconsiglierei di usarla.

Ciò significa che potresti avere qualcosa di simile al seguente:

var strs = ['abc', 'abc1', 'abc2']
for (var i = 0; i < strs.length; i++) {
    if (strs[i] == 'abc') {
        //do something 
    }
    else {
        //do something else
    }
}

Mentre potresti usare

if (str[i].match(/^abc$/g)) {
    //do something 
}

Sarebbe notevolmente più dispendioso in termini di risorse. Per me, una regola empirica generale è per un semplice confronto di stringhe usare un'espressione condizionale, per un modello più dinamico usare un'espressione regolare.

Altro su regex JavaScript: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions


12
@NiharSawant È perché questa non è la risposta alla domanda posta dall'OP. L'OP chiaramente non vuole abbinare "" le prime 3 lettere dell'alfabeto sono abc ", e la seconda soluzione qui non funziona per abbinare regex generali, ad es. / ^ [Abc] + $ /
DJClayworth

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.