如何动态添加javascript正则表达式转义字符

时间:2011-11-22 06:14:06

标签: javascript regex

我有一行代码如下

if($('#eqInputBox').val().search( $(this).html() ) == -1)

应该检查看看hq是否已经存在于eqInputBox中 - 问题是,有时$(this).html()中的字符可以是'+''*'。任何其他字符(在应用程序的可能字符集中)都可以工作,但是当这些字符出现时,正则表达式不会返回任何值 - 我想这可能是因为我无法忽略\角色来逃避这些角色。

任何人对于(这个)html字符+*的时候有什么想法,我还能正常检查吗?


修改

$(this).html()

是用户生成的div,所以我不能简单地手动设置转义字符。如果有必要,我该如何动态添加?

3 个答案:

答案 0 :(得分:2)

$(this).html()的值应该是有效的正则表达式模式。换句话说,您应该在其中写d*而不是\d*

因此,您应该在创建$(this).html()的值时静态转义字符。

更新:由于$(this).html()的值是由用户生成的,因此您可以创建一个辅助函数来检测特殊的正则表达式字符并在该函数中对其进行转义。

function escapeCharacters(patter){
    // Here escape special characters. Eg. d* to \d*. However, it's difficulat
}

然后以这种方式使用它:

if($('#eqInputBox').val().search( escapeCharacters($(this).html()) ) == -1)

答案 1 :(得分:1)

您必须模拟quotemeta,查看Escaping regular expression

RegExp.escape = function(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}

答案 2 :(得分:0)

MDN Docs 建议使用与 Toto 回答略有不同的正则表达式:

const response = await fetch('http://localhost:1337/dogs', {
      method: 'POST',
      headers: {
      'Content-Type': 'application/json'},
      body: json,
    })