javascript - 使用 RegEx 创建带有类名的 div

标签 javascript regex

使用 RegEx,我想将示例中的构造替换为 div。

所以,之前:

::: foo
some text
:::

之后:

<div class="foo">
some text
</div>

我找到了如何完成它( test ),但我的解决方案仅适用于一个类。换句话说,类被硬编码到脚本中:

<script>
document.body.innerHTML = document.body.innerHTML.replace(new RegExp(/(:::\s?[a-z])\w+/, 'g'), '<div class="foo">');
document.body.innerHTML = document.body.innerHTML.replace(new RegExp(/:::/, 'g'), '</div>');
</script>

如何更改它,以便它适用于任何类名?例如,这些结构也应该转换为 div:

::: foobarfoo
some text
:::

::: foo-bar-foo_bar_foo123-foo
some text
:::

最佳答案

您可以使用capturing groups ,也就是说,将正则表达式的一部分放在括号中,然后匹配的该部分将被捕获以用于替换,您可以在其中使用 $1 引用它:

var text = document.body.innerHTML;
text = text.replace(/:::\s?([^\s:]+)/g, '<div class="$1">')
text = text.replace(/:::/g, '</div>');
document.body.innerHTML = text;

如果同一正则表达式中有多个捕获组,则第二个及后续捕获组将由 $2$3 等引用。

请注意,您应该避免重复更新 document.body.innerHTML - 最好将原始文本放入变量中,然后用该变量进行替换,最后将最终结果写回 document.body.innerHTML。您还可以链接 .replace() 调用:

document.body.innerHTML = document.body.innerHTML
                           .replace(/:::\s?([^\s:]+)/g, '<div class="$1">')
                           .replace(/:::/g, '</div>');

另请注意,您不需要调用 new RegExp(),因为正则表达式开头和结尾的 / 是创建一个正则表达式对象本身。

关于javascript - 使用 RegEx 创建带有类名的 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42288287/

相关文章:

javascript - Angularjs - ng-click 函数与指令

javascript - 出现未知语法错误

javascript - 网格中最后一个元素的行为

javascript - 如何使用 javascript 检测表的任何 <td> 中的更改?

javascript - 如何在图像之间留出空间?

javascript - 删除括号前后的空格而不使用lookbehind

javascript - 用正则表达式替换捕获的空格未知次数

javascript通过正则表达式提取日期

java - 如何在java中使用正则表达式替换所有主题标签

regex - Apache Rewritemap 未被读取?