正则表达式匹配' \'斜线并替换为' \\'?

时间:2016-09-26 09:03:47

标签: javascript html regex tex

我正在将普通字符串转换为乳胶格式。因此我创建了乳胶代码匹配并将\单斜杠替换为\\双斜杠。为什么我需要它参考此{{3我试过下面的代码:



function test(){
  var tex="$$\left[ x=\left({{11}\over{2}}+{{\sqrt{3271}}\over{2\,3^{{{3}\over{2} $$";
   var tex_form = tex.replace("/[\\\/\\\\\.\\\\]/g", "\\");
  document.getElementById('demo').innerHTML=tex_form;//nothing get
  }
test();

<p id="demo"></p>
&#13;
&#13;
&#13;

未获取任何输出数据。但此link

中的匹配项

我希望将\替换为\\

3 个答案:

答案 0 :(得分:1)

存在以下问题:

  1. 字符串文字没有反斜杠;

  2. 正则表达式不是正则表达式;

  3. 预期正则表达式中的类不能匹配序列,只能匹配单个字符;

  4. 替换不会添加反斜杠,只能替换它们。

  5. 在这里您可以找到每个点的详细信息:

    1。如何在字符串文字中编码反斜杠

    您的tex变量没有反斜杠。这是因为字符串文字中的反斜杠不作为文字反斜杠,而是作为解释其后面的字符的转义。

    如果您有"$$\left...",则\l表示&#34;文字l&#34; ,因此您的变量内容将为:

    $$left...
    

    由于l不需要转义,反斜杠完全没必要,这两个分配会产生相同的字符串值:

    var tex="$$\left[ x=\left({{11}\over{2}}+{{\sqrt{3271}}\over{2\,3^{{{3}\over{2} $$";
    
    var tex="$$left[ x=left({{11}over{2}}+{{sqrt{3271}}over{2,3^{{{3}over{2} $$";
    

    要将该点带回家,代表相同的值:

    var tex="\$\$\l\e\f\t\[\ \x\=\l\e\f\t\(\{\{\1\1\}\o\v\e\r\{\2\}\}\+\{\{\s\q\r\t\{\3\2\7\1\}\}\o\v\e\r\{\2\,\3\^\{\{\{\3\}\o\v\e\r\{\2\}\ \$\$";
    

    如果你真的想在你的内容中使用字面反斜杠(我理解你这样做,因为这是关于LaTeX的),那么你需要使用反斜杠来逃避每个反斜杠:

    var tex="$$\\left[ x=\\left({{11}\\over{2}}+{{\\sqrt{3271}}\\over{2\\,3^{{{3}\\over{2} $$";
    

    现在,tex变量的内容将是此字符串:

    $$\left[ x=\left({{11}\over{2}}+{{\sqrt{3271}}\over{2\,3^{{{3}\over{2} $$
    

    2。如何编写正则表达式文字

    您正在将字符串文字传递给replace的第一个参数,而您确实打算传递正则表达式文字。你应该省略引用。 /是正则表达式文字的分隔符,而不是引号:

    /[\\\/\\\\\.\\\\]/g
    

    这应该用引号括起来。 JavaScript将/分隔符理解为表示正则表达式文字,包括末尾的可选修饰符(如此处g)。

    3。类是单个字符集

    此正则表达式包含不必要的字符。班级[...]应列出您要匹配的所有个人字符。目前你有这些字符(解析转义后):

    \
    /
    \
    \
    .
    \
    \
    

    反斜杠代表5次是有点过分的。此外,在JavaScript中,正向斜杠和点在类中发生时不需要进行转义。所以上面的正则表达式等同于这个:

    /[\\/.]/g
    

    也许这是你想要匹配的,或者不是。要匹配多个字符序列,您可以使用|运算符。这只是一个例子:

    /\\\\|\\\/|\\\./g
    

    ......但我认为你不需要这个。

    4。如何使用反斜杠实际前缀

    我觉得你想要用反斜杠替换一个点或正斜杠似乎很奇怪。可能你想前缀那些带反斜杠的人。在这种情况下,创建一个捕获组(带括号)并在$1中使用replace引用它:

    tex.replace(/([\\/.])/g, "\\$1");
    

    再次注意,在替换字符串中只有一个字面反斜杠,因为第一个是转义符(参见上面的第1点)。

答案 1 :(得分:0)

  

为什么我需要它

正如您链接的问题所示,\字符在JavaScript字符串文字中具有特殊含义。它代表an escape sequence

  

没有获得任何输出数据。但此链接中的匹配

当JavaScript编译器解析字符串文字时,将处理转义序列。

当您将正则表达式应用于它们时,它们已被消耗掉。斜杠字符仅存在于源代码中,而不存在于数据中。

如果要在字符串中添加斜杠字符,则需要在源代码中为其编写转义序列(\\)。之后您无法使用JavaScript将其重新添加。

答案 2 :(得分:-1)

不确定我是否理解了这个问题,但请尝试以下代码:

var tex_form = tex.replace("/(\\)/g","\\\\");.  

您需要使用'(' ')'代替'['']'来获得输出匹配。