Javascript 尝试转义用作jQuery选择器的字符串

Javascript 尝试转义用作jQuery选择器的字符串,javascript,jquery,regex,Javascript,Jquery,Regex,我有下面的代码,是我从另一个问题偷来的 $('#'+'^`test'.replace(/[!"#$%&'()*+,.\/:;<=>?@[\\\]^`{|}~]/g, "\\\\$&")) 那么它工作得很好。正则表达式方法有什么问题 我只是有一些带有疯狂字符的ID,比如^和`,我需要jQuery来避免阻塞 到目前为止,最简单的解决方法是使用属性选择器: $('[id="' + theId + '"]').doSomething(); 只要ID不包含反斜杠或双引号,就

我有下面的代码,是我从另一个问题偷来的

$('#'+'^`test'.replace(/[!"#$%&'()*+,.\/:;<=>?@[\\\]^`{|}~]/g, "\\\\$&"))
那么它工作得很好。正则表达式方法有什么问题

我只是有一些带有疯狂字符的ID,比如^和`,我需要jQuery来避免阻塞

到目前为止,最简单的解决方法是使用属性选择器:

$('[id="' + theId + '"]').doSomething();

只要ID不包含反斜杠或双引号,就不需要进一步转义。

您需要2倍的转义。因为首先replace/regex需要转义来编写转义。下一个转义是需要通过$()从jquery中转义

postet regex更清晰的语法是:

"#^bla`".replace('^','\\\^').replace('`','\\\`');
将“^bla”替换为“^bla”

未捕获错误:语法错误,无法识别的表达式:\\\\^\\`test(…)

如果要使用正则表达式,还必须使用\[和\]转义[]

"+".replace(/[!"#$%&'()*+,.'()*+,.\/:;<=>?@\[\\\]^`{|}~]/g, "yes")
“+”.replace(/[!“$%&'()*+,.()*+,.\/:;?@\[\\]^`{124;}~]/g,“是”)

另一个解决方法是使用vanilla
getElementById
,它不会解析选择器。这样,您仍然可以高效地按id进行选择:

let res = $(document.getElementById('^`test'));
用这个怎么样

const $ID = function(selector){
    return $('[id="' + selector.match(/#?(\S+)/)[1] + '"]')
}
然后您可以像jquery一样使用它

$ID('#^`div')

有趣的是,我想知道它是如何工作的。我想我会继续使用getElementById,但我想这是对我的问题最直接的回答。@Moss:这是一个。但是是的,
getElementById
是一个很好的方法(为什么我没有提到它?!)当ID可以是“野生的”时什么意思是我不理解你的解决方案是如何工作的,但我的第一次尝试没有。jQuery特有的东西?@Moss:不,这只是的规则。
后面的文本必须遵循的规则,但是属性值选择器中的文本没有,它只是必须没有你在
后面使用的那种引号>=
(您传递到
getElementById
的文本可以是任何内容。)警告潜伏者:
let
是ES2015+,它在某些浏览器中不起作用。
$ID('#^`div')