Quero remover aspas duplas de uma String

239

Eu quero remover o em ""torno de uma String.

por exemplo, se a String for: "I am here"então eu quero apenas a saída I am here.

ankur
fonte
4
Por que você simplesmente não usa string.replace ('"', '')
Adarsh ​​Kumar
69
str = str.replace(/"/g,"");
Mr_Green
11
Deseja remover TODAS as cotações ou cotações de limite?
Kos
36
stackoverflow.com/q/19155566/989121 . Você fará 255 perguntas, uma vez para cada caractere ASCII?
Georg #
6
str = str.replace(/^"|"$/g, '');substitui aspas de limite. A resposta de Mr_Green vai globalmente substituir todos os "que não é bom
Kolob Canyon

Respostas:

387

Assumindo:

var someStr = 'He said "Hello, my name is Foo"';
console.log(someStr.replace(/['"]+/g, ''));

Isso deve funcionar ... (se seu objetivo é substituir todas as aspas duplas).

Veja como funciona:

  • ['"]é uma classe de caracteres, corresponde a aspas simples e duplas. você pode substituí-lo por "para corresponder apenas aspas duplas.
  • +: uma ou mais cotações, caracteres, conforme definido pela classe de caracteres anterior (opcional)
  • g: a bandeira global . Isso diz ao JS para aplicar o regex a toda a cadeia. Se você omitir isso, substituirá apenas um único caractere.

Se você estiver tentando remover as aspas em torno de uma determinada string (ou seja, em pares), as coisas ficam um pouco mais complicadas. Você precisará usar asserções de aparência:

var str = 'remove "foo" delimiting double quotes';
console.log(str.replace(/"([^"]+(?="))"/g, '$1'));
//logs remove foo delimiting quotes
str = 'remove only "foo" delimiting "';//note trailing " at the end
console.log(str.replace(/"([^"]+(?="))"/g, '$1'));
//logs remove only foo delimiting "<-- trailing double quote is not removed

Regex explicou:

  • ": literal, corresponde a qualquer literal "
  • (: começa a capturar o grupo. O que estiver entre parênteses ( ()) será capturado e poderá ser usado no valor de substituição.
  • [^"]+: Classe de personagem, corresponde a todos os caracteres, exceto "1 ou mais vezes
  • (?="): asserção de aparência positiva à largura zero (como não capturada). A partida anterior só será válida se for seguida por um "literal
  • ): final do grupo de captura, capturamos tudo entre o fechamento de abertura "
  • ": outro literal, item de lista cf, um

A substituição é que '$1'esta é uma referência anterior ao primeiro grupo capturado, sendo [^" ]+ou tudo entre aspas duplas. O padrão corresponde às aspas e ao que há entre elas, mas o substitui apenas pelo que está entre as aspas, removendo-as efetivamente.
O que ele faz é some "string with" quotes-> substitui "string with"por -> string with. Cotações desaparecidas, trabalho feito.

Se as aspas sempre estiverem no início e no final da string, você poderá usar o seguinte:

str.replace(/^"(.+(?="$))"$/, '$1');

Com a entrada remove "foo" delimiting ", a saída permanecerá inalterada, mas altere a sequência de entrada para "remove "foo" delimiting quotes"e você terminará remove "foo" delimiting quotescomo saída.

Explicação:

  • ^": corresponde ao início da string ^e a ". Se a sequência não começar com a ", a expressão já falhará aqui e nada será substituído.
  • (.+(?="$)): corresponde (e captura) tudo, incluindo aspas duplas uma ou mais vezes, desde que a aparência positiva seja verdadeira
  • (?="$): o lookahead positivo é o mesmo que acima, apenas especifica que " deve ser o fim da string ( $=== end)
  • "$: corresponde à citação final, mas não a captura

A substituição é feita da mesma maneira que antes: substituímos a partida (que inclui as aspas de abertura e fechamento) por tudo o que estava dentro delas.
Você deve ter notado que omiti a gflag (para BTW global), porque, como estamos processando toda a string, essa expressão se aplica apenas uma vez.
Um regex mais fácil que faça praticamente a mesma coisa (há diferença interna de como o regex é compilado / aplicado) seria:

someStr.replace(/^"(.+)"$/,'$1');

Como antes ^"e "$combinar as citações de delimitação no início e no final de uma corda, ea (.+)partidas tudo mais, e captura-o. Eu tentei esse regex, ao lado do descrito acima (com afirmação lookahead) e, para minha surpresa, achei que este era um pouco mais lento. Meu palpite seria que a asserção de lookaround faz com que a expressão anterior falhe assim que o mecanismo determinar que não existe "no final da string. Ah, bem, mas se é isso que você deseja / precisa, continue lendo :

No entanto, neste último caso, é muito mais seguro, mais rápido, mais sustentável e apenas melhor para fazer isso:

if (str.charAt(0) === '"' && str.charAt(str.length -1) === '"')
{
    console.log(str.substr(1,str.length -2));
}

Aqui, estou verificando se o primeiro e o último caractere da string são aspas duplas. Se estiverem, estou usando substrpara cortar os primeiro e o último caracteres. As cadeias são indexadas a zero, portanto, o último caractere é o charAt(str.length -1). substrespera 2 argumentos, onde o primeiro é o deslocamento a partir do qual a substring inicia, o segundo é o seu comprimento. Como não queremos o último caractere, mais do que queremos o primeiro, esse comprimento é str.length - 2. Fácil-peazy.

Dicas :

Mais informações sobre asserções detalhadas podem ser encontradas aqui. As
Regex são muito úteis (e divertidas para a IMO), podem ser um pouco desconcertantes a princípio. Aqui estão mais alguns detalhes e links para recursos sobre o assunto.
Se você ainda não está confortável com o uso de regex, considere usar:

var noQuotes = someStr.split('"').join('');

Se houver muitas aspas na string, isso pode ser mais rápido do que usar regex

Elias Van Ootegem
fonte
1
@rid: Eu editei, expainding um pouco sobre o que a expressão faz, e como personalizá-lo
Elias Van Ootegem
83
str = str.replace(/^"(.*)"$/, '$1');

Essa regexp removerá as aspas apenas se eles forem o primeiro e o último caracteres da sequência. F.ex:

"I am here"  => I am here (replaced)
I "am" here  => I "am" here (untouched)
I am here"   => I am here" (untouched)
David Hellsing
fonte
63

Se for garantido que a string tenha uma citação (ou qualquer outro caractere único) no início e no final que você deseja remover:

str = str.slice(1, -1);

slice tem muito menos sobrecarga do que uma expressão regular.

darrinm
fonte
8
Por que os votos negativos? '"Estou aqui"'. Fatia (1, -1) -> 'Estou aqui'!
darrinm
2
Surpreendido, isso foi prejudicado, pois é exatamente o tipo de operação 'rápida' de que você precisa se estiver lidando com literais RDF (no N3, por exemplo, URIs geralmente são denotados como <uri>e literais como "literal"). Então aqui está um voto positivo. ;)
Mark Birbeck
2
(Especialmente porque a pergunta original diz que deseja remover as aspas em torno de uma corda.)
Mark Birbeck
2
Essa deve ser a resposta aceita, pois faz exatamente o que foi solicitado e o faz com eficiência.
Pascal
38

Se você tem controle sobre seus dados e sabe que suas aspas duplas envolvem a string (portanto, não apareça na string) e a string é um número inteiro ... diga com:

"20151212211647278"

ou similar, isso remove as aspas circundantes

JSON.parse("20151212211647278");

Não é uma resposta universal, no entanto, é escorregadia para necessidades de nicho

Scott Stensland
fonte
Isso causará erro no FireFox com: SyntaxError: JSON.parse: caractere inesperado na linha 1 da coluna 1 dos dados JSON
Ben Pretorius
não ... funciona muito bem no lançamento recente do FireFox
Scott Stensland 28/03
JSON.parse ("{123123}"); isso irá explodir a sua resposta
Abhijeet
3
JSON.parse("20151212211647278dfvs"); SyntaxError: Unexpected token d in JSON at position 17
Systems Rebooter
1
recebi um erro SyntaxError: token inesperado <no JSON na posição 0
Freddy Sidauruk
17

Se você deseja remover apenas as aspas de limite:

function stripquotes(a) {
    if (a.charAt(0) === '"' && a.charAt(a.length-1) === '"') {
        return a.substr(1, a.length-2);
    }
    return a;
}

Essa abordagem não tocará a corda se não parecer "text in quotes".

Kos
fonte
2
Use a.charAt(x)se desejar <suporte ao ECMA5 (ex.ex IE7).
precisa
8

Se você deseja remover apenas aspas do início ou do fim, use a seguinte expressão regular:

'"Hello"'.replace(/(^"|"$)/g, '');
Denis
fonte
1
Observe que isso também alteraria "fooe foo". Pode-se apenas querer descartar pares inteiros destes.
Kos
Obrigado pela observação, no entanto, pensei que era um comportamento esperado.
Denis #
5

Para reafirmar seu problema de uma maneira que seja mais fácil de expressar como uma expressão regular:

Obtenha a substring de caracteres contidos entre zero ou uma aspas duplas iniciais e zero ou uma aspas duplas finais.

Aqui está o regexp que faz isso:

  var regexp = /^"?(.+?)"?$/;
  var newStr = str.replace(/^"?(.+?)"?$/,'$1');

Quebrando a Regexp:

  • ^"? uma correspondência gananciosa para zero ou uma das aspas duplas principais
  • "?$ uma correspondência gananciosa para zero ou uma aspas duplas à direita
  • esses dois marcam uma captura não gananciosa de todos os outros personagens (.+?), que conterão o destino como $1.

Isso retornará delimited "string" herepara:

str = "delimited "string" here"  // ...
str = '"delimited "string" here"' // ...
str = 'delimited "string" here"' // ... and
str = '"delimited "string" here'
Mogsdad
fonte
5

Um forro para o povo preguiçoso

var str = '"a string"';
str = str.replace(/^"|"$/g, '');
Kolob Canyon
fonte
Essa é a resposta mais apropriada. /"/gnão vai funcionar "My name is \"Jason\"".
Jason Liu
esta resposta remove cada citação no início e no final, o que não é bom em caso de " - is a quotecorda, por isso não é o mesmo que em torno
vladkras
2

Isso funciona...

var string1 = "'foo'";
var string2 = '"bar"';

function removeFirstAndLastQuotes(str){
  var firstChar = str.charAt(0);
  var lastChar = str[str.length -1];
  //double quotes
  if(firstChar && lastChar === String.fromCharCode(34)){
    str = str.slice(1, -1);
  }
  //single quotes
  if(firstChar && lastChar === String.fromCharCode(39)){
    str = str.slice(1, -1);
  }
  return str;
}
console.log(removeFirstAndLastQuotes(string1));
console.log(removeFirstAndLastQuotes(string2));

Ronnie Royston
fonte
código está errado. Tente entrada de seqüência de caracteres vazia, ou tente 'foo"ou simplesmentefoo"
Pavel P
1
var expressionWithoutQuotes = '';
for(var i =0; i<length;i++){
    if(expressionDiv.charAt(i) != '"'){
        expressionWithoutQuotes += expressionDiv.charAt(i);
    }
}

Isso pode funcionar para você.

Splinker P
fonte
0

Se você deseja remover todas as aspas duplas na string, use

var str = '"some "quoted" string"';
console.log( str.replace(/"/g, '') );
// some quoted string

Caso contrário, você deseja remover apenas aspas ao redor da string, use:

var str = '"some "quoted" string"';
console.log( clean = str.replace(/^"|"$/g, '') );
// some "quoted" string
balkon_smoke
fonte
0

Este código simples também funcionará, para remover, por exemplo, aspas duplas de uma string cercada por aspas duplas:

var str = 'remove "foo" delimiting double quotes';
console.log(str.replace(/"(.+)"/g, '$1'));
Amaynut
fonte
0

Se você estiver tentando remover as aspas duplas, tente seguir

  var Stringstr = "\"I am here\"";
  var mystring = String(Stringstr);
  mystring = mystring.substring(1, mystring.length - 1);
  alert(mystring);
krunal shimpi
fonte
0

este código é muito melhor para mostrar o número na caixa de texto

$ (this) = [sua caixa de texto]

            var number = $(this).val();
            number = number.replace(/[',]+/g, '');
            number = number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
            $(this).val(number); // "1,234,567,890"
ali alizadeh
fonte
-2

Tente seguir o regex para remover aspas duplas da string.

    $string = "I am here";
    $string =~ tr/"//d;
    print $string;
    exit();
krunal shimpi
fonte
2
Eles querem uma solução javascript!
Toto