我在这里做研究,为您找到格式化用户短信的最佳方式。
我想要实现的样本:
1)用户发送此消息:
Doctor,
I would like to have
an appointment tomorrow morning.Please,call me!
2)我的应用程序格式化此文本输出:
Doctor, I would like to have an appointment tomorrow morning. Please, call me!
请注意:
$.trim()
)<br>
必须替换为一个空格到目前为止我得到了一些东西:
text.replace(/<(.|\n\r)*?>/g, '')
.replace(/\s/g,' ')
.replace(/<br>/g,' ')
.replace(/ +/g,' ');
将所有表达式合并为一个模式会很好。 有没有更短的方法呢?
答案 0 :(得分:1)
在两个正则表达式中{jsFiddle demo):
text.replace(/\s+|([.,])(?=\S)/g, '$1 ').replace(/^\s|\s$/g, '')
将其分解,它匹配:
(?=
正向前瞻)并将其替换为单个空格(ASCII 32),在任何匹配的句点或逗号中保留为$ 1。然后在第二个正则表达式中剥离任何前导或尾随空白字符。第二个正则表达式是必要的,因为为原始字符串添加空格的正则表达式必须在替换子字符串中有空格,并且我们希望在开头或结尾处有 no 空格。
如果<br>
很重要,那么在使用上述正则表达式(.replace(/<br>/g, ' ')
)之前最好将其替换为空格字符,但如果你真的想在同一个正则表达式中这样做: jsFiddle demo)
text.replace(/(?:<br>|\s)+|([.,])(?=\S)(?!<br>)/g, '$1 ').replace(/^\s|\s$/g, '')
答案 1 :(得分:0)
没有测试过,但我相信这是等效的:
text.replace(/^\s+|\s+$/g, '')
.replace(/\s+|\s*<br>\s*/g,' ')
修改强>
我不明白为什么第一个表达式替换了<
和>
所以我把它排除了。
答案 2 :(得分:0)
也许,但我不确定进一步减少它的好处。正则表达式已经有点难以阅读,因此在以后进行调试时,逻辑分解会非常有用。
答案 3 :(得分:0)
text.replace(/\s/g,' ')
用空格替换任何空格,换行符,垂直制表符,常规制表符和空格
.replace(/<\s*br\s*\/*\s*>/g,' ')
用空格替换任何<br>, < br/ >, <br /> <br /> <br //>
(等)
.replace(/\s{2,}/g,' ')
用一个空格替换任何双倍或更多空格
.replace(/^\s|\s$/,'')
ltrim + rtrim(虽然因为交替,性能明智,根据字符串大小分割成单独的ltrim和rtrims可能更好)
<强>最终强>
text = text.replace(/\s/g,' ').replace(/<\s*br\s*\/*\s*>/g,' ').replace(/\s{2,}/g,' ').replace(/^\s|\s$/,'');
你不能真正做到“一种模式”,因为前两种中的任何一种都有可能在完成后连续留下两个空格,所以你需要总是有最后一个句子。