javascript - ultimo - dividir cadena solo en la primera instancia del carácter especificado
split javascript array (11)
En mi código, dividí una cadena basada en _
y tomé el segundo elemento de la matriz.
var element = $(this).attr(''class'');
var field = element.split(''_'')[1];
Toma good_luck
y me da luck
. ¡Funciona genial!
Pero, ahora tengo una clase que se ve como good_luck_buddy
. ¿Cómo obtengo mi javascript para ignorar el segundo _
y darme luck_buddy
?
Encontré este var field = element.split(new char [] {''_''}, 2);
en ac # stackoverflow responde pero no funciona. Lo intenté en jsFiddle ...
¿Para qué necesitas expresiones regulares y matrices?
myString = myString.substring(myString.indexOf(''_'')+1)
var myString= "hello_there_how_are_you"
myString = myString.substring(myString.indexOf(''_'')+1)
console.log(myString)
Esto funcionó para mí en Chrome + FF:
"foo=bar=beer".split(/^[^=]+=/)[1] // "bar=beer"
"foo==".split(/^[^=]+=/)[1] // "="
"foo=".split(/^[^=]+=/)[1] // ""
"foo".split(/^[^=]+=/)[1] // undefined
Si también necesita la clave, intente esto:
"foo=bar=beer".split(/^([^=]+)=/) // Array [ "", "foo", "bar=beer" ]
"foo==".split(/^([^=]+)=/) // [ "", "foo", "=" ]
"foo=".split(/^([^=]+)=/) // [ "", "foo", "" ]
"foo".split(/^([^=]+)=/) // [ "foo" ]
//[0] = ignored (holds the string when there''s no =, empty otherwise)
//[1] = hold the key (if any)
//[2] = hold the value (if any)
Evito RegExp a toda costa. Aquí hay otra cosa que puedes hacer:
"good_luck_buddy".split(''_'').slice(1).join(''_'')
La solución de Mark F es increíble, pero no es compatible con navegadores antiguos. La solución de Kennebec es increíble y está respaldada por navegadores antiguos, pero no admite expresiones regulares.
Por lo tanto, si está buscando una solución que divida su cadena solo una vez, que sea compatible con navegadores antiguos y admita expresiones regex, esta es mi solución:
String.prototype.splitOnce = function(regex)
{
var match = this.match(regex);
if(match)
{
var match_i = this.indexOf(match[0]);
return [this.substring(0, match_i),
this.substring(match_i + match[0].length)];
}
else
{ return [this, ""]; }
}
var str = "something/////another thing///again";
alert(str.splitOnce(///+/)[1]);
Necesito las dos partes de la cuerda, por lo tanto, la mirada regex detrás me ayuda con esto.
const full_name = ''Maria do Bairro'';
const [first_name, last_name] = full_name.split(/(?<=^[^ ]+) /);
console.log(first_name);
console.log(last_name);
Para principiantes como yo que no están acostumbrados a la Expresión regular, esta solución alternativa funcionó:
var field = "Good_Luck_Buddy";
var newString = field.slice( field.indexOf("_")+1 );
El método slice () extrae una parte de una cadena y devuelve una nueva cadena y el método indexOf () devuelve la posición de la primera aparición encontrada de un valor especificado en una cadena.
Puede usar la expresión regular como:
var arr = element.split(/_(.*)/)
Puede usar el segundo parámetro que especifica el límite de la división. es decir: var field = element.split (''_'', 1) [1];
Reemplace la primera instancia con un marcador de posición único y luego divídalo desde allí.
"good_luck_buddy".replace(//_/,''&'').split(''&'')
["good","luck_buddy"]
Esto es más útil cuando se necesitan ambos lados de la división.
Use paréntesis de captura :
"good_luck_buddy".split(/_(.+)/)[1]
"luck_buddy"
Ellos se definen como
Si el
separator
contiene paréntesis de captura, los resultados coincidentes se devuelven en la matriz.
Entonces en este caso queremos dividir en _.+
(Es decir, el separador de división es una cadena secundaria que comienza con _
) pero también dejar que el resultado contenga alguna parte de nuestro separador (es decir, todo después de _
).
En este ejemplo, nuestro separador (que coincide con _(.+)
) Es _luck_buddy
y el grupo capturado (dentro del separador) es lucky_buddy
. Sin el paréntesis de captura, luck_buddy
(matching .+
) No se habría incluido en la matriz de resultados, ya que es el caso de la split
simple que los separadores no se incluyen en el resultado.
String.split
, String.split
de Javascript no tiene forma de limitar el número real de divisiones. Tiene un segundo argumento que especifica cuántos de los elementos de división reales se devuelven, lo que no es útil en su caso. La solución sería dividir la cadena, cambiar el primer elemento y volver a unir los elementos restantes:
var element = $(this).attr(''class'');
var parts = element.split(''_'');
parts.shift(); // removes the first item from the array
var field = parts.join(''_'');