我正在使用 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/