请参阅以下内容: https://regex101.com/r/gG3eO8/1
我想要做的不是使用常量字符串,在这种情况下'我是H1',我想在那里插入一个变量,以便值是动态的,以下是我的意思尝试但我猜我没有正确逃避
var value = "random string";
"/<h1>.*?" + value + ".*?<\/h1>/g"
逃避上述行为的正确方法是什么?
答案 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 = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": ''',
'/': '/'
};
function escapeHtml (string) {
return String(string).replace(/[&<>"'\/]/g, function fromEntityMap (s) {
return entityMap[s];
});
}
var el = '<h1>' + escapeHtml(myVariable) + '</h1>';