JavaScript正则含撇号字符串转数组及Express中间件处理需求
解决Express中间件中带撇号文本的拆分问题
我懂你遇到的困扰——当文本里有像"It's"这种带撇号的单词时,普通的拆分逻辑会把它拆成奇怪的片段,破坏了单词的完整性。咱们可以通过更精准的正则表达式来搞定这个问题,既能保留带撇号的完整单词,又能正确拆分标点、换行转换后的<br />标签。
具体实现步骤
- 第一步:先按你的需求把换行符替换成
<br />,这一步逻辑不变。 - 第二步:使用定制的正则表达式来拆分文本,它会识别三类内容:转换后的换行标签、带合法撇号的完整单词、独立的标点符号。
示例代码
// Express中间件示例 app.use((req, res, next) => { // 假设用户输入的文本存在于req.body.text中 if (req.body?.text) { // 替换换行符为<br /> const textWithLineBreaks = req.body.text.replace(/\n/g, '<br />'); // 核心正则:匹配<br />、带撇号的单词、常见标点(含省略号) const splitPattern = /(<br \/>)|(\b[\w']+\b)|([.,!?;:"()…]|\.{3})/g; // 执行匹配并过滤空项 const splitArray = textWithLineBreaks.match(splitPattern)?.filter(item => item.trim()) || []; // 把处理后的数组挂载到req对象上,供后续中间件使用 req.processedTextArray = splitArray; } next(); });
正则表达式说明
<br \/>:专门匹配转换后的换行标签,确保它作为单独的数组项存在\b[\w']+\b:\b是单词边界,[\w']允许字母、数字、下划线和撇号,这样像"It's"、"don't"这类单词会被完整识别[.,!?;:"()…]|\.{3}:匹配常见的单个标点,同时也处理省略号(不管是单个省略号字符…还是三个点...)
测试效果
对于输入文本:It's familiar. things get thrown out of sync...
处理后得到的数组是:["It's", "familiar", ".", "things", "get", "thrown", "out", "of", "sync", "..."]
如果需要支持更多特殊单词(比如带连字符的"mother-in-law"),可以把正则里的单词部分改成\b[\w'-]+\b,不过要注意这种情况下要确保连字符不会被误匹配到单词边界外的场景。
内容的提问来源于stack exchange,提问作者Stuart Brown
相关产品推荐
相关产品推荐

