Eliminar todo después de cierto personaje

281

¿Hay alguna forma de eliminar todo después de cierto personaje o simplemente elegir todo hasta ese personaje? Estoy obteniendo el valor de un href y hasta el "?", Y siempre será una cantidad diferente de caracteres.

Me gusta esto

/Controller/Action?id=11112&value=4444

Quiero que href sea /Controller/Actionsolo, así que quiero eliminar todo después de "?".

Estoy usando esto ahora:

 $('.Delete').click(function (e) {
     e.preventDefault();

     var id = $(this).parents('tr:first').attr('id');                
     var url = $(this).attr('href');

     console.log(url);
 }
Dejan.S
fuente

Respuestas:

468
var s = '/Controller/Action?id=11112&value=4444';
s = s.substring(0, s.indexOf('?'));
document.write(s);

Muestra aquí

También debo mencionar que las funciones de cadena nativas son mucho más rápidas que las expresiones regulares, que solo deberían usarse cuando sea necesario (este no es uno de esos casos).

Código actualizado para dar cuenta de no '?':

var s = '/Controller/Action';
var n = s.indexOf('?');
s = s.substring(0, n != -1 ? n : s.length);
document.write(s);

Muestra aquí

Demian Brecht
fuente
15
Este código de espagueti no debería ser la mejor respuesta. ver la respuesta del método dividido
LastTr tribunal
1
LoL: de alguna manera, aquellos que no entienden la expresión regular y cómo los trabajos divididos obtuvieron los poderes de voto. Comprender los métodos de cadena es suficiente. Menos comprensión de cómo funcionan las cosas y las reglas de código más grandes del mundo: P Así que agregué una explicación paso a paso a la respuesta dividida (para cambiar el mundo).
1
LoL: la división puede aceptar expresiones regulares, ¿+1 por no usar división? LoL: ¿Javascript usa regex, entonces +1 por no usar Javascript? ¿Cómo puede una mayor cantidad de código y complejidad hacer que sea una tarea simple? ¿No es tanto la expresión regular como la división más simple y más efectiva?
294

También puedes usar la split()función. Este parece ser el más fácil que me viene a la mente :).

url.split('?')[0]

jsFiddle Demo

Una ventaja es que este método funcionará incluso si no hay ninguna ?cadena; devolverá toda la cadena.

kapa
fuente
1
¿Qué hace el [0] en esta situación?
Dejan.S
13
splitdevuelve una matriz (en este caso tiene dos elementos, 0y 1), y [0]obtiene el primer elemento de la matriz devuelta.
kapa
41
+1, lo mejor de esto es que siempre funciona, incluso si no hay '?'
Kevin
¿Qué debemos hacer si queremos dividir '\'?
anud33p
1
Me encanta esta respuesta, tan simple y realmente potente en lo que te da
Richlewis
19
var href = "/Controller/Action?id=11112&value=4444";
href = href.replace(/\?.*/,'');
href ; //# => /Controller/Action

Esto funcionará si encuentra un '?' y si no lo hace

James Kyburz
fuente
esto solo eliminará el '?' y algunos otros a OP no pidieron
Kevin
44
Esto eliminará todo después del ?(incluido)
mcont
2
MEJOR RESPUESTA ! OP solicitó eliminar TODO después ?y dijo claramente que eliminar ?también diciendo: Quiero que href sea / Controller / Action only
3

Si también quieres mantener "?" y simplemente elimine todo después de ese personaje en particular, puede hacer:

var str = "/Controller/Action?id=11112&value=4444",
    stripped = str.substring(0, str.indexOf('?') + '?'.length);

// output: /Controller/Action?
patad
fuente
Esto no funciona si la cadena no contiene un?
Stephan Bijzitter
@StephanBijzitter Sí, lo sé. Dado que mi respuesta dice: "si también quieres mantener el ? ", Obviamente tiene que haber un signo de interrogación en la cadena para mantener ..
patad
Extraño, parece que mi comentario fue para la otra respuesta de @Imran. No sé por qué lo publiqué en tu respuesta.
Stephan Bijzitter
2

A mí me funciona muy bien:

var x = '/Controller/Action?id=11112&value=4444';
var remove_after= x.indexOf('?');
var result =  x.substring(0, remove_after);
alert(x);
Samina Samina
fuente
1

Puede ser muy tarde fiesta: p

Puede usar una referencia inversa $ '

$' - Inserts the portion of the string that follows the matched substring.

let str = "/Controller/Action?id=11112&value=4444"

let output = str.replace(/\?.+/g,"$'")

console.log(output)

Code Maniac
fuente
0

Trabajó para mi:

      var first = regexLabelOut.replace(/,.*/g, "");

fuente
-1

Se puede hacer fácilmente usando JavaScript como referencia, vea el enlace Cadena JS

EDITAR se puede hacer fácilmente como. ;)

var url="/Controller/Action?id=11112&value=4444 ";
var parameter_Start_index=url.indexOf('?');
var action_URL = url.substring(0, parameter_Start_index);
alert('action_URL : '+action_URL);
Imran
fuente