Une toda la cuerda

165

¿Cuál es la expresión regular (en JavaScript si es importante) para que solo coincida si el texto es una coincidencia exacta? Es decir, no debe haber caracteres adicionales en el otro extremo de la cadena.

Por ejemplo, si estoy tratando de igualar para abc, a continuación 1abc1, 1abcy abc1que no coinciden.

Jake Pearson
fuente
55
Para aquellos nuevos en regex, hay dos buenas respuestas para esto, dependiendo de lo que estés buscando. El autor de la pregunta realmente quiere \babc\b, lo que permitiría, por ejemplo, 123 abc 123hacer coincidir abc(pero no los ejemplos negativos como en la pregunta); sin embargo, ^abc$se asegurará de que aesté al principio de la cadena y cal final; de lo contrario, no coincidirá.
Andrew

Respuestas:

305

Use los delimitadores de inicio y fin: ^abc$

Howard
fuente
3
@Jake, me alegro de que la respuesta funcionó, pero creo que debes tener en cuenta que solo funcionará cuando solo abc sea el único elemento de la cadena. Por ejemplo, no coincidiría con 'las primeras 3 letras del alfabeto son abc'
matchew
Esto funcionó para mí, tal vez mi ejemplo debería haber sido "abc def ghi" como objetivo del partido.
Jake Pearson
@Jake si su cadena era "abc def ghi", entonces / ^ abc $ / no funcionaría. ex: jsfiddle.net/XUyAc
matchew
2
Entiendo eso, si quiero hacer coincidir "abc def ghi", mi expresión regular sería^abc def ghi$
Jake Pearson el
2
Nota: para hacer que un patrón con alternancias coincida con una cadena completa, puede ser necesario envolverlo con un grupo (no) de captura: /^(?:abc|def)$/o /^(abc|def)$/. De lo contrario, si el grupo no se usa, /^abc|def$/coincidirá abcal comienzo de la cadena O defal final de la cadena.
Wiktor Stribiżew
40

Depende. Tú podrías

string.match(/^abc$/)

Pero eso no coincidiría con la siguiente cadena: 'las primeras 3 letras del alfabeto son abc. no abc123 '

Creo que te gustaría usar \b(límites de palabras):

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

Ejemplo en vivo: http://jsfiddle.net/uu5VJ/

Si la solución anterior funciona para usted, le aconsejaría que no la use.

Eso significa que puede tener algo como lo siguiente:

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

Si bien podrías usar

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

Sería considerablemente más intensivo en recursos. Para mí, una regla general es que para una comparación de cadena simple use una expresión condicional, para un patrón más dinámico use una expresión regular.

Más sobre expresiones regulares de JavaScript: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

Matchew
fuente
12
@NiharSawant Es porque esta no es la respuesta a la pregunta que hizo el OP. El OP claramente no quiere hacer coincidir "'las 3 primeras letras del alfabeto son abc', y la segunda solución aquí no funciona para hacer coincidir expresiones regulares generales, por ejemplo / ^ [abc] + $ /
DJClayworth