用于设置用户文本格式的Javascript正则表达式
我在这里做一项研究,为您找到格式化用户短信的最佳方式 我正在努力实现的一个示例: 1) 用户发送此消息:用于设置用户文本格式的Javascript正则表达式,javascript,regex,replace,Javascript,Regex,Replace,我在这里做一项研究,为您找到格式化用户短信的最佳方式 我正在努力实现的一个示例: 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! 请注意:
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()
- 两个单词之间的额外空格必须替换为一个空格
- 新行、换行符、制表符必须替换为一个空格
- 点和逗号必须与下一个单词分开(morning.Please,call->morning.Please,call)
text.replace(/<(.|\n\r)*?>/g, '')
.replace(/\s/g,' ')
.replace(/<br>/g,' ')
.replace(/ +/g,' ');
text.replace(//g',)
.替换(/\s/g“”)
.替换(/
/g,“”)
.替换(/+/g');
最好将所有表达式合并到一个模式中。
有没有较短的方法可以做到这一点?还没有测试过,但我相信这是等效的:
text.replace(/^\s+|\s+$/g, '')
.replace(/\s+|\s*<br>\s*/g,' ')
text.replace(/^\s+|\s+$/g'))
.替换(/\s+|\s*
\s*/g',)
编辑
我不明白为什么第一个表达式替换了
,所以我省略了它。没有测试它,但我相信这是等效的:
text.replace(/^\s+|\s+$/g, '')
.replace(/\s+|\s*<br>\s*/g,' ')
text.replace(/^\s+|\s+$/g'))
.替换(/\s+|\s*
\s*/g',)
编辑
我不明白为什么第一个表达式替换了
,所以我把它删掉了。也许吧,但我不确定进一步减少它的好处。正则表达式已经有点难读了,所以在以后调试时,将其逻辑分解可能会很有用。也许吧,但我不确定进一步减少它的好处。正则表达式已经有点难以阅读,因此在以后调试时,将其逻辑分解可能会很有用。text.replace(/\s/g')
将任何空格、换行符、垂直制表符、正则制表符和空格替换为空格
.replace(//g',)
用空格替换任何
、
、
(等)
.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$/,'');
text=text.replace(//\s/g',).replace(//g',).replace(//\s{2,}/g',).replace(//\s |\s$/,'');
您不能真正执行“一个模式”,因为前两个模式中的任何一个都有可能在完成后在一行中留下两个空格,因此您需要始终保留最后一个子句。text.replace(/\s/g,”)
将任何空格、换行符、垂直制表符、常规制表符和空格替换为空格
.replace(//g',)
用空格替换任何
、
、
(等)
.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$/,'');
text=text.replace(//\s/g',).replace(//g',).replace(//\s{2,}/g',).replace(//\s |\s$/,'');
您不能真正执行“一个模式”,因为前两个模式中的任何一个都有可能在完成后在一行中留下两个空格,因此您需要始终保留最后一个子句。在两个正则表达式()中:
如果将其分解,则与以下任一项匹配:
- 一个或多个空白字符(换行符、制表符、空格)
- 后跟非空白字符的句点或逗号(我们使用
正向前瞻)(?=
很重要,最好在使用上述一对正则表达式(.replace(/
/g,,)
)之前将其替换为空格字符,但如果确实想在同一正则表达式中执行此操作:()
text.replace(/(?:
|\s)+([,])(?=\s)(?!
)/g,$1')。replace(/^\s |\s$/g'))
在两个正则表达式()中:
如果将其分解,则与以下任一项匹配:
- 一个或多个空白字符(换行符、制表符、空格)
- 后跟非空白字符的句点或逗号(我们使用
正向前瞻)(?=
很重要,最好在使用上述一对正则表达式(.replace(/
/g,,)
)之前将其替换为空格字符,但如果确实想在同一正则表达式中执行此操作:()
text.replace(/(?:
|\s)+([,])(?=\s)(?!
)/g,$1')。replace(/^\s |\s$/g'))
您的问题与jquery无关,因此我将其更新为更一般的问题。您的问题与jquery无关,因此我将其更新为更一般的问题。此[,]
帮助了我。现在我使用此$(“#txtMessage”).text($(“#txtMessage”).text().replace(//g,).replace(//s+|([,!))(=\s)/g,“$1”).replace(/^\s |\s$/g')。替换(/+//g');
这个[,]
帮助了我。现在我正在使用这个$(“#txtMessage