javascript - 正则表达式仅搜索/替换文本,不在 HTML 属性中

标签 javascript html regex

我正在使用 JavaScript 来做一些正则表达式。考虑到我正在使用格式良好的源,我想删除 [,.] 之前的任何空格并在 [,.] 之后只保留一个空格,除了 [,.] 是数字的一部分。因此我使用:

text = text.replace(/ *(,|\.) *([^ 0-9])/g, '$1 $2');

问题是这也替换了 html 标签属性中的文本。例如我的文本是(总是用标签包裹):

<p>Test,and test . Again <img src="xyz.jpg"> ...</p>

现在它添加了一个像这样的 src="xyz.jpg" 的空格,这不是预期的。我怎样才能重写我的正则表达式?我想要的是

<p>Test, and test. Again <img src="xyz.jpg"> ...</p>

谢谢!

最佳答案

您可以使用前瞻来确保匹配不发生在标记内:

text = text.replace(/(?![^<>]*>) *([.,]) *([^ \d])/g, '$1 $2');

通常的警告适用于 CDATA 部分、SGML 注释、SCRIPT 元素和属性值中的尖括号。但是我怀疑您真正的问题将来自“纯”文本的变幻莫测; HTML 甚至不在同一个联盟中。 :D

关于javascript - 正则表达式仅搜索/替换文本,不在 HTML 属性中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3460004/

相关文章:

javascript - 错误子状态

MySQL REGEXP 3次重复字符

javascript - 用对象中的值替换匹配的字符

javascript - 在knockout.js中,是否可以使用动态绑定(bind)值?

javascript - 如何使用 Flow 输入 es6 生成器

javascript - HTML5 Circle防止拖动到Canvas之外并防止碰撞

javascript - 使用 fabric.js 移动元素时如何将图像保持在 Canvas 的背面?

c++ - 如何使用 regex_replace?

javascript - 在 javascript 中添加静态资源的 URL 路径(在 Spring MVC 中)

javascript - 导航栏放在网页顶部时如何修复?