鉴于此文本:
<span class='green'>foobar</span> something <span class='red'>fizzle</span>
我需要以某种方式实现这一目标:
<tagA>foobar</tagA> something <tabB>fizzle</tagB>
我基本上必须匹配<span class='green'>*anything*</span>
并且能够将它与红色的区分开来。我必须在两端采用这个绿色跨度,并将其替换为固定字符串,但以某种方式保留两个标签之间的任何文本。
我发誓我已经查了很多资料,但不知道如何使用正则表达式找到这个问题的解决方案。
最佳答案
这应该可以解决问题
替换
<span class='green'>(.*?)</span>
与
<tagA>$1</tagA>
并对值为红色的类执行类似的操作
更新1
对反馈“如果某些内容包含换行符怎么办?”的响应
如果我没记错的话 JavaScript 不支持“单行模式”/点匹配换行符。
<span class='green'>([\s\S]*?)</span>
更新2
这个调整后的正则表达式允许
<span\s+class\s*=\s*['"]green['"]\s*>([^>]*)</\s*span\s*>
- html 规范允许的空白
- 属性值接受单引号和双引号
- 使用否定字符类匹配标签之间的值,该字符类被限定为贪婪,通常会产生更好的性能,并且 JavaScript 也支持
关于javascript - JS 正则表达式替换 - 替换随机字符串周围的固定文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31958748/