[英]Regex match with '\' slash and replace with '\\'?
我将普通字符串转换为乳胶格式。因此我创建了乳胶代码匹配项,并将\\
单斜杠替换为\\\\
双斜杠。为什么我需要它参考此链接 。我尝试了以下代码:
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>
没有获得任何输出数据。但是此链接中的匹配项
我希望将\\
替换为\\\\
存在以下问题:
字符串文字没有反斜杠;
正则表达式不是正则表达式;
预期正则表达式中的类不能匹配序列 ,只能匹配单个字符;不能匹配序列 。
替换不会添加反斜杠,仅替换为反斜杠。
在这里,您可以找到有关每个点的详细信息:
您的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="\$\$\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} $$
您确实要将字符串文字传递给replace
的第一个参数,而您确实打算传递正则表达式文字。 您应该省略引号以免发生这种情况。 /
是正则表达式文字的定界符,而不用引号引起来:
/[\\\/\\\\\.\\\\]/g
这不应用引号引起来。 JavaScript将/
分隔符理解为表示正则表达式文字,包括末尾的可选修饰符(如此处的g
)。
此正则表达式包含不必要的字符。 类[...]
应该列出你想匹配所有单个字符。 当前,您具有以下字符(在解决了转义符之后):
\
/
\
\
.
\
\
反斜杠代表5次实在是太过分了。 同样,在JavaScript中,正斜杠和点在类中发生时不需要转义。 因此,上面的正则表达式与此等效:
/[\\/.]/g
也许这是或不是您想要匹配的内容。 要匹配多个字符序列,可以使用|
操作员。 这只是一个例子:
/\\\\|\\\/|\\\./g
...但是我认为您不需要这个。
对于我来说,您想用反斜杠替换点或正斜杠似乎很奇怪。 也许你想那些前缀用反斜杠。 在这种情况下,创建一个捕获组(带有括号),并在此replace
以$1
引用它:
tex.replace(/([\\/.])/g, "\\$1");
再次注意,替换字符串中仅存在一个文字反斜杠,因为第一个是转义符(请参见上面的第1点)。
为什么我需要它
正如您链接到的问题所说, \\
字符在JavaScript字符串文字中具有特殊含义。 它代表一个转义序列 。
没有获得任何输出数据。但是此链接中的匹配项
当JavaScript编译器解析字符串文字时,将处理转义序列。
当您将正则表达式应用于它们时,它们已被消耗。 斜杠字符仅存在于您的源代码中,而不存在于您的数据中。
如果要在字符串中添加斜杠字符,则需要在源代码中为其编写转义序列( \\\\
)。 之后,您将无法再使用JavaScript将其重新添加。
不知道我是否理解了问题,但是请尝试以下代码:
var tex_form = tex.replace("/(\\)/g","\\\\");.
您需要使用'(' ')'
而不是'['']'
来获得输出的匹配项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.