我该如何转动这个
n <!DOCTYPE html >n <html>n <body>n <p>test </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 </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+([<>])
- 匹配<
或>
之前的任何空格
- 麦克特斯
.
([<>]s+)
- 匹配任何<
或>
后跟空格。
let str = `'n <!DOCTYPE html >n <html>n <body>n <p>test </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+([<>])| |([<>])s+/g, "$1$2")
console.log(op)
用一个正则表达式来做到这一点:/r?n?ss+|s+(?=>)| /g
.
这里唯一可能的问题是它不会像 < !doctype>
那样在<
后删除单个空格,但到目前为止我们得到的答案也没有。如果 js 支持积极的回溯,你可以覆盖它,只需在正则表达式中添加|(?<=<)s+
即可。
顺便说一句,这是测试正则表达式的好地方:https://regexr.com