如何存储包含反斜杠的字符串(无需手动双重转义)?

时间:2015-03-19 02:21:15

标签: javascript regex string

我需要将字符串中的反斜杠加倍,并且发现了Javascript的奇怪限制:如果不评估转义字符,则无法输入字符串。行为意味着我无法通过输入区分

"\!" == "!" // true
"\?" == "?" // true
"\d" == "d" // true
"\!\[\d\d\:\d\d\:\d\d.*?\]\(" == "![dd:dd:dd.*?](" // true

请注意,\dd是正则表达式中具有不同含义的字符串(数字与字母d)。字符串评估会导致它们以相同的方式存储,如\bb

"\![d\d \bb" // == "![dd bb]" etc.

我想创建一个new RegExp,由字符串(转义符号为as required加倍)和变量组成,能够处理一系列文件,而无需每次都手动更改正则表达式,或依赖一些较弱的,更通用的正则表达式。

看起来我真的必须亲手做到这一点,尽管反斜杠正好在那里被替换。由于缺乏任何明显的方法,我可以对正则表达式做同样的事情而感到困惑

如果没有能力输入反斜杠(据我所知),这似乎不可能 - 或者说解决方案是hacky而不是编程。

有谁知道我正在寻找的功能?这似乎很基础,所以我希望我错过了一些明显的东西!

\!\[返回2而不是4的长度这样的观察让我觉得它实际上可能是语言的一些基本事实,但是常识告诉我......这个页面正在用Javascript处理。果然,钓掉以前的代码块:

document.querySelector('... > code')[0].innerText
// "\!\["
document.querySelector('... > code')[0].innerText.length

...返回4而不是2 - 所以肯定有办法输入这样的字符串吗?

相关问题 How do I Programmatically create a double escape?

3 个答案:

答案 0 :(得分:1)

因此,在多次阅读您的问题后,我想我会到达您的目的地,这听起来像是一个XY问题。逃脱的角色只是一个角色;转义是语法的一部分,而不是字符串本身。如果要动态构建正则表达式,则必须双重转义特殊字符。在任何情况下,这都是一种依赖函数字符串化的hacky方式:

var regex = function(f) {
  return RegExp(f.toString().match(/return\s+?'([\s\S]+)'/).pop())
}

// instead of `RegExp('\\d\\b')`
regex(function(){return '\d\b'}) //=> /\d\b/

但同样,这是的方式;只需手动双击你的角色。

答案 1 :(得分:0)

如果你想存储实际的反斜杠,你知道你可以双重逃避吗?对不起?

"\\ha!" // Will result in '\ha'

答案 2 :(得分:-1)

如果要在字符串中使用文字反斜杠,则需要输入两个反斜杠。第一个逃脱第二个,表明它应该被解释为一个实际的反斜杠而不是一个转义字符。

如果您想要一个内容为以下字符的字符串:

\

您将使用以下字符串文字:

"\\"