我如何在这个正则表达式中转义变量

时间:2015-06-04 05:16:22

标签: javascript regex

请参阅以下内容: https://regex101.com/r/gG3eO8/1

我想要做的不是使用常量字符串,在这种情况下'我是H1',我想在那里插入一个变量,以便值是动态的,以下是我的意思尝试但我猜我没有正确逃避

var value = "random string";
"/<h1>.*?" + value + ".*?<\/h1>/g"

逃避上述行为的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

使用RegExp构造函数。

if (!RegExp.escape) {
    RegExp.escape = function (value) {
        return value.replace(/\W/g, "\\$&")
    };
}
var reg = new RegExp("<h1>.*?" + RegExp.escape(value) + ".*?</h1>", "g");

答案 1 :(得分:0)

如果要搜索包含特定字符串值的<h1>元素,可以使用DOM函数简单地迭代这些元素。

var value = "I'm H1";

[].forEach.call(document.querySelectorAll('h1'), function(el) {
  var t = el.textContent || el.innerText || '';
  if (t.indexOf(value) != -1) {
    alert('Found it!');
  }
});
<h1>I'm H1 buddy</h1>
<h1>I'm also H1</h1>
<h1>Hi I'm H1</h1>

在这种情况下,它会显示两次改变。

如果变量中包含HTML,则可以创建临时<div>元素并设置其.innerHTML属性以创建要搜索的根节点。

答案 2 :(得分:-1)

我猜你的问题是你想阻止HTML注入你的页面。幸运的是,这是一个以前很好解决的问题!

如果您在浏览器中,则可能正在使用jQuery

var $el = $('<h1 />').text(myVariable);

如果没有,你可以从Mustache中提取these lines

var entityMap = {
  '&': '&amp;',
  '<': '&lt;',
  '>': '&gt;',
  '"': '&quot;',
  "'": '&#39;',
  '/': '&#x2F;'
};

function escapeHtml (string) {
  return String(string).replace(/[&<>"'\/]/g, function fromEntityMap (s) {
    return entityMap[s];
  });
}

var el = '<h1>' + escapeHtml(myVariable) + '</h1>';