[英]Javascript regular expression for pretty formatting user text
我正在這里進行一項研究,以找到格式化用戶文本消息的最佳方法。
我正在嘗試實現的示例:
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,' ');
最好將所有表達式合並為一種模式。 有更短的方法嗎?
在兩個正則表達式中( jsFiddle演示 ):
text.replace(/\s+|([.,])(?=\S)/g, '$1 ').replace(/^\s|\s$/g, '')
對其進行分解,它可以匹配:
(?=
正向超前) 並將其替換為一個空格(ASCII 32),在任何匹配的句點或逗號中均保留為$ 1。 然后,在第二個正則表達式中刪除所有開頭或結尾的空白字符。 第二個正則表達式是必需的,因為向原始字符串添加空格的正則表達式必須在替換子字符串中具有空格,並且我們不希望在開頭或結尾有空格。
如果<br>
重要,最好在使用上述對正則表達式( .replace(/<br>/g, ' ')
)之前將其替換為空格字符,但是如果您確實希望這樣做,正則表達式:( jsFiddle演示 )
text.replace(/(?:<br>|\s)+|([.,])(?=\S)(?!<br>)/g, '$1 ').replace(/^\s|\s$/g, '')
還沒有測試過,但我相信這是等效的:
text.replace(/^\s+|\s+$/g, '')
.replace(/\s+|\s*<br>\s*/g,' ')
編輯
我不明白為什么第一個表達式替換了<
和>
所以我省略了它。
也許可以,但是我不確定進一步減少它的好處。 正則表達式已經有些難以理解,因此在以后進行調試時,將其邏輯分解可能會很有用。
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和rtrim)
最后:
text = text.replace(/\s/g,' ').replace(/<\s*br\s*\/*\s*>/g,' ').replace(/\s{2,}/g,' ').replace(/^\s|\s$/,'');
您實際上無法執行“一個模式”,因為前兩個中的任何一個都可能在完成時連續兩個空格,因此您需要始終使用last子句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.