Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

JavaScript escapando barra invertida \ como faço pra que isso não ocorra!!!

bom dia pessoal, estou com um problema queria uma ajuda de vcs. Algo esta fazendo com que o conteúdo passado na função escape a barra invertida \, eu preciso que elas não escapem pois essa função renderiza um diagrama onde todas elas são fazem parte da renderização.

// escrevanatela('$$\gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.$$');

function escrevanatela(conteudo) {
  console.log(conteudo);
// nesse momento meu parâmetro já mostra sem as \
  // '$$gamma(z) = int_0^infty t^{z-1}e^{-t}dt,.$$'
  document.getElementById("wmd-input").value = conteudo;
  document.getElementById("wmd-button-bar").innerHTML = "";
    var converter = Markdown.getSanitizingConverter();
    Markdown.Extra.init(converter, {
      extensions: "all",
      highlighter: "prettify"
    });
    var editor = new Markdown.Editor(converter);
    editor.hooks.chain("onPreviewRefresh", prettyPrint);
    editor.run();
};

que já souber como resolver ou até mesmo propor soluções eu agradeço D+!! abraços.

9 respostas

Na string onde você utilizaria o caractere '\' use '\\' Ex: escrevanatela('$$\\gamma(z) = \\int_0^\\infty t^{z-1}e^{-t}dt\\,.$$'); A saída deverá ser algo do tipo: '$$\gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.$$'

OBS: Não sei se é a melhor solução mas você pode tentar e futuramente refatorar para algo melhor.

blz Fernando, dessa forma eu consegui, mas preciso passar apenas uma \ pois tenho outros tipos de expressão regular que vou passar nessa função e se o javascript deixar de interpretar uma que for acaba quebrando o resultado final que deveria sair da expressão! Preciso de uma solução que o javascript interprete, na minha visão e isso que ta acontecendo ele não interpreta essa primeira \ não sei o motivo!

André talvez eu não tenha entendido ainda a lógica do seu código. Você vai passar uma expressão regular como parâmetro da função escrevanatela? E esse conteúdo deverá ser executado como expressão regular posteriormente?

Se o conteúdo for uma expressão regular você não precisa passar uma string como parâmetro. Você poderia criar a expressão: let expressaoRegular = /$$\gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.$$/ ; Veja que não tem aspas. E passar a expressão como parâmetro . Caso você precise imprimir a expressão original você pode usar: console.log(expressaoRegular.source);

Eai Fernando, muito obrigado pela ajuda! pensa comigo, eu preciso passar na função escrevatanatela("\andre") e preciso que ela retorne exatamente esse valor! mas ele me retorna somente "andre" sem a \, eu consigo passar "\andre" e ter o retorno "\andre", ai e que ta o problema eu preciso passar apenas uma \ e ter ela no retorno.

solução!

Olá André,

Tudo vai depender para quais navegadores você quer dar suporte.

Hoje, é possível fazer o seguinte com String.raw

var str = String.raw`\andre`;

function test(s) {
    console.info(s);
}

test(str);

Porém, isso funciona apenas para navegadores modernos. Caso precise dar suporte para navegadores antigos vai precisar escapar as barras.

Isso porque a barra invertida é um caracter de escape e não uma barra literalmente falando.

A barra invertida é usada para identificar caracteres especiais, como por exemplo \n \t \k e etc..

Então a única forma de fazer o que quer dando suporte a navegadores antigos é passando duas barras invertidas como já foi dito.

Att.

Fala André esse parâmetro precisa ser String?

O código do colega Wagner funciona perfeitamente nos browsers que suportam as novas versões do ECMA.

Wagner e Fernando, muito obrigado por essa ajuda! consegui fazer oque precisava através da String.raw , vlw D+++ :D