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

How can I store a string which contains backslashes (without manually double escaping)?

本文关键字:转义 字符串 何存储 存储 包含反      更新时间:2023-09-26

我需要将字符串中的反斜杠加倍,并发现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,以便能够处理一系列文件,而无需每次手动更改正则表达式,也无需依赖一些较弱、更通用的正则表达式。

看起来我真的必须手动完成,尽管反斜杠就在那里可以替换。我很困惑,因为没有任何明显的方法可以为正则表达式做同样的事情

如果没有输入反斜杠的能力(据我所知),这似乎是不可能的——或者更确切地说,解决方案会很粗糙,而且不是程序化的。

有人知道我要找的函数吗?这似乎很基本,所以我希望我错过了一些显而易见的东西!

观察到'!'[的长度返回2而不是4,这让我觉得这实际上可能是该语言的一些基本事实,但常识告诉我……这个页面是用Javascript处理的。果不其然,找出之前的代码块:

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

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

相关问题如何以编程方式创建双转义?

所以,在多次阅读你的问题后,我想我明白了你的意思,这听起来肯定是一个XY问题。转义字符只是一个字符;转义是语法的一部分,而不是字符串本身。如果您是动态构建regex,则必须对特殊字符进行双转义。在任何情况下,这里有一种依靠函数字符串化来做你想做的事情的方法:

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/

但同样,这是而不是要走的路;只需手动对字符进行双重转义。

你知道如果你想存储实际的反斜杠,你可以使用双转义,对吧?

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

如果希望在字符串中有一个字面反斜杠,则需要输入两个反斜杠。第一个对第二个进行转义,表示应该将其解释为实际的反斜杠,而不是转义字符。

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

'

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

"''"