Express应用中合并两个数组值及处理表单输入换行符问题
解决Express中带换行符的字符串与数组匹配问题
Hey Stuart, 看你在处理Express表单提交的带\r\n换行的字符串时,遇到了数组匹配的问题,我来帮你捋捋解决方案!
首先,我们得先把提交的字符串处理干净,再进行数组匹配。你的示例字符串里有连续的\r\n\r\n分隔段落,先把这一步搞定:
1. 清洗带换行符的输入字符串
表单提交的storyText里的\r\n是Windows风格的换行符,我们可以先把它转换成更易处理的格式:
方法一:分割成段落数组
如果你的文本是按段落区分的,直接按连续换行分割,同时过滤掉空段落:
let analyseStory = req.body.storyText; // 按连续的\r\n分割,过滤空内容 const paragraphs = analyseStory.split(/\r\n\r\n/).filter(para => para.trim() !== '');
这样paragraphs数组里就会是每一段的文本,比如你的示例会变成:
["In the mens reserve race, Cambridges Goldie were beaten by Oxfords Isis, their seventh consecutive defeat.", "In the womens reserve race, Cambridges Blondie defeated Oxfords Osiris"]
方法二:统一替换成空格(适合整体文本匹配)
如果不需要保留段落结构,直接把所有换行符换成空格,方便后续全局查找:
const cleanedText = analyseStory.replace(/\r\n/g, ' ');
2. 数组匹配的具体实现
接下来要看你的两个数组是什么逻辑——是键值对映射(比如队伍名对应大学),还是索引对应(比如数组A的第n项对应数组B的第n项)?我给你两种常见场景的解决方案:
场景一:键值对映射匹配
假设你有两个数组,比如teams = ['Goldie', 'Isis', 'Blondie', 'Osiris']和universities = ['Cambridge', 'Oxford', 'Cambridge', 'Oxford'],要从文本里找到队伍,然后匹配对应的大学:
先把数组转成映射对象(更高效),再在清洗后的文本里查找:
// 把两个数组转成键值对映射 const teams = ['Goldie', 'Isis', 'Blondie', 'Osiris']; const universities = ['Cambridge', 'Oxford', 'Cambridge', 'Oxford']; const teamToUni = {}; teams.forEach((team, index) => { teamToUni[team] = universities[index]; }); // 在清洗后的文本中查找匹配 cleanedText.split(' ').forEach(word => { // 处理单词末尾的标点,比如示例里的"Isis," const cleanedWord = word.replace(/[.,]/g, ''); if (teamToUni.hasOwnProperty(cleanedWord)) { console.log(`找到队伍 ${cleanedWord},所属大学:${teamToUni[cleanedWord]}`); // 这里写你的业务逻辑,比如存入结果数组 } });
场景二:索引对应匹配
如果你的两个数组是按索引一一对应的(比如数组A存关键词,数组B存对应要执行的操作),可以遍历关键词数组,检查文本中是否包含:
const keywords = ['Goldie', 'Blondie']; const actions = ['记录剑桥失利', '记录剑桥胜利']; keywords.forEach((keyword, index) => { if (cleanedText.includes(keyword)) { console.log(`匹配到关键词 ${keyword},执行操作:${actions[index]}`); } });
3. 注意事项
- 大小写问题:如果文本里的单词大小写不固定(比如可能出现
goldie),可以统一转成小写后再匹配:const lowerText = cleanedText.toLowerCase(); if (lowerText.includes(keyword.toLowerCase())) { // 匹配逻辑 } - 标点干扰:文本里的单词可能带逗号、句号,记得用正则去掉这些标点后再匹配,避免漏判。
内容的提问来源于stack exchange,提问作者Stuart Brown
相关产品推荐
相关产品推荐

