从字符串 JavaScript 中删除多余的空格、换行符和$nbsp



我该如何转动这个

n            <!DOCTYPE html >n            <html>n                <body>n                <p>test&nbsp;&nbsp;</p>n                <select multiple="multiple">n                    <option value="1" correct="true">red</option><option value="2" correct="false">Blue</option>n                </select>n                <p visible-if="correct">Yeah correct</p>n                <p visible-if="wrong">Wrong dude</p>n                </body>n            </html>n 

进入这个

<!DOCTYPE html><html><body><p>test</p><select multiple="multiple"> <option value="1" correct="true">red</option><option value="2" correct="false">Blue</option></select><p visible-if="correct">Yeah correct</p><p visible-if="wrong">Wrong dude</p></body></html>

使用 JavaScript

我试过以下代码。 但无法让它工作

.replace(/r?n?s+/g, '').trim();

您的正则表达式不正确。

节点.js CLI 的示例输出:

> "n ... your string here ... </html>n".replace(/[rn]/g, '').replace(/s+/g, ' ').replace(/ >/g, '>').replace(/> </g, '><').trim()
'<!DOCTYPE html><html><body><p>test&nbsp;&nbsp;</p><select multiple="multiple"><option value="1" correct="true">red</option><option value="2" correct="false">Blue</option></select><p visible-if="correct">Yeah correct</p><p visible-if="wrong">Wrong dude</p></body></html>'

您应该了解如何添加更多清理代码的要点...

简而言之:不要试图将所有内容都挤进一个正则表达式中。

我认为这将解决问题:

let result = null;
let input = `     <!DOCTYPE html >  
<html>             <body>`;
result = input.replace(/s+((?=<)|(?=$))/g, '');

它将尊重 html 标记中的所有内容,但会擦除其外部的每个空格、制表符、回车符等。

你可以看到它在这里工作。

这个正则表达式会有所帮助。

s+([<>]) - 匹配<>之前的任何空格

&nbsp; - 麦克特斯&nbsp; .

([<>]s+) - 匹配任何<>后跟空格。

let str = `'n            <!DOCTYPE html >n            <html>n                <body>n                <p>test&nbsp;&nbsp;</p>n                <select multiple="multiple">n                    <option value="1" correct="true">red</option><option value="2" correct="false">Blue</option>n                </select>n                <p visible-if="correct">Yeah correct</p>n                <p visible-if="wrong">Wrong dude</p>n                <  /body>n            </html>n';`
let op = str.replace(/s+([<>])|&nbsp;|([<>])s+/g, "$1$2")
console.log(op)

你可以

用一个正则表达式来做到这一点:/r?n?ss+|s+(?=>)|&nbsp;/g .

这里唯一可能的问题是它不会像 < !doctype> 那样在<后删除单个空格,但到目前为止我们得到的答案也没有。如果 js 支持积极的回溯,你可以覆盖它,只需在正则表达式中添加|(?<=<)s+即可。

顺便说一句,这是测试正则表达式的好地方:https://regexr.com

最新更新