Corresponder a sequência inteira

165

Qual é a expressão regular (em JavaScript, se for o caso) para corresponder apenas se o texto for uma correspondência exata? Ou seja, não deve haver caracteres extras no outro extremo da string.

Por exemplo, se eu estou tentando corresponder para abc, em seguida 1abc1, 1abce abc1que não coincidem.

Jake Pearson
fonte
5
Para os novos no regex, há duas boas respostas para isso, dependendo do que você está procurando. O solicitante realmente quer \babc\b, o que permitiria, por exemplo, 123 abc 123corresponder a abc(mas não os exemplos negativos, como na pergunta); no entanto, ^abc$garantirá que aesteja no início da sequência e cno final - caso contrário, não corresponderá.
Andrew

Respostas:

305

Use os delimitadores inicial e final: ^abc$

Howard
fonte
3
@ Jake, fico feliz em saber como a resposta funcionou, mas acho que você deve notar que só funcionará quando apenas abc for o único item da string. Por exemplo, ele não corresponderia a 'as 3 primeiras letras do alfabeto são abc'
matchew
Isso funcionou para mim, talvez meu exemplo devesse ter sido "abc def ghi" como alvo da partida.
Jake Pearson
@ Jake se sua string era "abc def ghi" então / ^ abc $ / não funcionaria. ex: jsfiddle.net/XUyAc
matchew
2
Entendo que, se eu quero corresponder "abc def ghi" meu regex seria^abc def ghi$
Jake Pearson
2
Nota: para fazer um padrão com alternâncias corresponder a uma cadeia inteira, pode ser necessário envolvê-lo com um grupo (não) de captura: /^(?:abc|def)$/ou /^(abc|def)$/. Caso contrário, se o grupo não for usado, /^abc|def$/corresponderá abcno início da string OU defno final da string.
precisa saber é o seguinte
40

Depende. Você poderia

string.match(/^abc$/)

Mas isso não corresponderia à seguinte string: 'as 3 primeiras letras do alfabeto são abc. não abc123 '

Eu acho que você gostaria de usar \b(limites de palavras):

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

Exemplo ao vivo: http://jsfiddle.net/uu5VJ/

Se a solução anterior funcionar para você, eu não recomendaria usá-la.

Isso significa que você pode ter algo como o seguinte:

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

Enquanto você poderia usar

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

Seria consideravelmente mais intensivo em recursos. Para mim, uma regra geral é que, para uma comparação simples de cadeias, use uma expressão condicional, para um padrão mais dinâmico, use uma expressão regular.

Mais sobre expressões regulares do JavaScript: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

matchew
fonte
12
@NiharSawant É porque essa não é a resposta para a pergunta feita pelo OP. O OP claramente não deseja corresponder "'as 3 primeiras letras do alfabeto são abc", e a segunda solução aqui não funciona para correspondência de expressões regulares, por exemplo, / ^ [abc] + $ /
DJClayworth