正则表达式与"\"斜杠匹配并替换为"\\"?



我正在将正常字符串转换为latex格式。因此,我创建了乳胶代码匹配并将的单斜杠替换为\的双斜杠。为什么我需要它参考这个链接。下面代码:

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>

没有得到任何输出数据。但是匹配在这个链接

我希望需要将替换为\

有这些问题:

  1. 字符串没有反斜杠;

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

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

  4. 替换将不添加反斜杠,只替换它们

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

1。如何在字符串字面值

中编码反斜杠

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

当你有"$$left..."时,那么l意味着"literal l",所以你的变量的内容将是:

$$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="$$left[ x=left({{11}over{2}}+{{sqrt{3271}}over{2,3^{{{3}over{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。如何使用反斜杠作为前缀

对我来说,你想用反斜杠代替一个点或正斜杠似乎很奇怪。也许你想在前面加上反斜杠。在这种情况下,创建一个捕获组(带括号),并在replace中使用$1引用它:

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

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

为什么我需要它

正如您链接到的问题所说,字符在JavaScript字符串文字中具有特殊含义。它表示一个转义序列。

没有得到任何输出数据。但是匹配在这个链接

转义序列在JavaScript编译器解析字符串字面值时处理。

当您将正则表达式应用于

时,它们已经被使用了。斜杠字符只存在于源代码中,而不存在于数据中。

如果要在字符串中放入斜杠字符,则需要在源代码中为它编写转义序列(\)。你不能在之后用JavaScript添加它们。

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

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

您需要使用'(' ')'而不是'['']'来获得输出的匹配

最新更新