Remova tudo depois de um certo caractere

280

Existe uma maneira de remover tudo depois de um determinado personagem ou simplesmente escolher tudo até esse personagem? Estou recebendo o valor de um href e até o "?", E sempre haverá uma quantidade diferente de caracteres.

Como isso

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

Eu quero que o href seja /Controller/Actionapenas, então eu quero remover tudo depois do "?".

Estou usando isso agora:

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

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

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

Respostas:

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

Amostra aqui

Também devo mencionar que as funções nativas de strings são muito mais rápidas que as expressões regulares, que devem ser usadas apenas quando necessário (esse não é um desses casos).

Código atualizado para não incluir '?':

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

Amostra aqui

Demian Brecht
fonte
15
esse código de espaguete não deve ser a melhor resposta. veja a resposta do método de divisão
LastTribunal 07/07
1
LoL - De alguma forma, aqueles que não entendem a regex e como a divisão funciona obtém o poder de voto. Compreender os métodos String é suficiente. O mínimo de entendimento de como as coisas funcionam e o maior código governam o mundo: P Então, adicionei uma explicação passo a passo à resposta dividida (para mudar o mundo).
1
LoL - A divisão pode aceitar regex tão +1 por não usar a divisão? LoL - Javascript usa regex tão +1 por não usar Javascript? Como mais código e complexidade podem torná-lo uma tarefa simples? Regex e split não são mais simples e eficazes?
293

Você também pode usar a split()função Este parece ser o mais fácil que me vem à cabeça :).

url.split('?')[0]

jsFiddle Demo

Uma vantagem é que esse método funcionará mesmo se não houver ?uma string - ele retornará a string inteira.

kapa
fonte
1
o que o [0] faz nessa situação?
precisa saber é o seguinte
13
splitretorna uma matriz (neste caso, possui dois elementos 0e 1) e [0]obtém o primeiro elemento da matriz retornada.
KapaAbr
41
+1, o melhor é que sempre funciona, mesmo que não haja '?'
Kevin
o que devemos fazer se queremos dividir '\'?
Anud33p
1
Amo esta resposta, tão simples e ainda muito poderosa no que lhe dá
Richlewis
19
var href = "/Controller/Action?id=11112&value=4444";
href = href.replace(/\?.*/,'');
href ; //# => /Controller/Action

Isso funcionará se encontrar um '?' e se isso não acontecer

James Kyburz
fonte
isso apenas removerá o '?' e alguns outros para OP não pediu
Kevin
4
Isso removerá tudo após o ?(incluído)
mcont 8/15
2
MELHOR RESPOSTA ! OP pediu TUDO retirar após ?e claramente para remover ?também por dizer: eu quero a href ser / controle / ação única
3

Se você também deseja manter "?" e basta remover tudo depois desse caractere específico, você pode fazer:

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

// output: /Controller/Action?
patad
fonte
Isso não funciona se a string não contém um?
Stephan Bijzitter
@StephanBijzitter Sim, eu sei. Como a minha resposta diz: "se você também deseja manter o ? " - obviamente tem que haver um ponto de interrogação na string para manter ..
patad
Estranho, parece que meu comentário foi feito para a outra resposta de @Imran. Não sei por que eu postei na sua resposta.
Stephan Bijzitter
1

Pode ser festa muito atrasada: p

Você pode usar uma referência anterior $ '

$' - 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
fonte
1

Funciona muito bem para mim:

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

Trabalhou para mim:

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

fonte
-2

Isso pode ser feito facilmente usando JavaScript para referência, consulte o link JS String

EDIT pode ser feito facilmente 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
fonte