【发布时间】:2017-11-26 13:28:42
【问题描述】:
我正在尝试使用以下代码替换所有出现的正则表达式搜索和替换,但由于某种原因它只替换了第一次出现:
var userContent = '<div class="header"><!--Start Main Menu--><ul class="main-menu"> <li><a href="/">Home</a> </li> <li><a href="/">About</a> </li> <li><a href="/">Portfolio</a> </li> <li><a href="/">Contact</a> </li> </ul><!--End Main Menu--></div><div class="footer"><!--Start Main Menu--><ul class="main-menu"> <li><a href="/">Home</a> </li> <li><a href="/">About</a> </li> <li><a href="/">Portfolio</a> </li> <li><a href="/">Contact</a> </li> </ul><!--End Main Menu--></div>';
var menuItems = "<li><a href='/'>Home</a></li><li><a href='/about'>About</a></li><li><a href='/portfolio'>Portfolio</a></li><li><a href='/contact'>Contact</a></li>";
var quote = function(str) {
return str.replace(/([.?*+^$[\]/(){}|-])/g, "\\$1");
};
var re = new RegExp(quote('<!--Start Main Menu-->') + "[^]+" + quote('<!--End Main Menu-->'), 'g');
userContent = userContent.replace(re, '<!--Start Main Menu--><ul class="main-menu">' + menuItems + '</ul><!--End Main Menu-->');
console.log(userContent);
我似乎不明白为什么,我已经在引用 /g 中说明了,我尝试将 /g 添加到 userContent.replace 但它似乎不喜欢它。
【问题讨论】:
-
用 HTML 解析正则表达式不是一个好主意。
-
@NisargShah 我知道,但在这种情况下,这是我正在处理的情况。如果它在一次出现时解析 HTML 很好,为什么不为两者都做呢?有没有更好的方法来做到这一点?
-
您可以使用 Javascript 通过处理 DOM 元素来做到这一点。你能在问题中解释你想要做什么吗?
-
@NisargShah 我基本上是在尝试用变量 menuItems 替换 和 之间的所有内容。
标签: javascript regex