javascript - 如何从文本数组中替换句子中的多个单词?
问题描述
我有一个句子和一组文本。
sentence = 'Hi I am fine. how are you'
arrayOfTexts = ['Hi','I am','how','how are','how are you']
replacedText = '** * ** fine. *** *** ***'
所以我想在这里做的,我想比较与文本值数组匹配的句子单词,并用星号'*'替换它们。
条件:
- 当多个词匹配而不是单个匹配时,替换词的第一偏好更高。Exp:
how are you
用how are you
nothow
或替换how are
。您可以认为首先替换的是更高的克数。 - 目前,我只想要最多 4 克(4 双)。
我的解决方案 我将我的句子转换为 4 克,并逐个搜索每一对,但我认为它有点多余。
sentenceArray = ['Hi I am fine', 'I am fine .', 'am fine . how', 'fine . how are', '. how are you','Hi I am', 'I am fine', 'am fine .', 'fine . how', '. how are', 'how are you','Hi I', 'I am', 'am fine', 'fine .', '. how', 'how are', 'are you','Hi', 'I', 'am', 'fine', '.', 'how', 'are', 'you']
我的问题 有没有更好的方法来解决这个问题?
解决方案
您可以按字符串长度排序arrayOfTexts
(将最长的放在第一位),然后将其转换为在每个可能的字符串之间交替的正则表达式,并执行全局替换:
const sentence = 'Hi I am fine. how are you';
const arrayOfTexts = ['Hi','I am','how','how are','how are you']
.sort((a, b) => b.length - a.length);
const pattern = new RegExp(arrayOfTexts.join('|'), 'g');
console.log(sentence.replace(pattern, 'FOO'));
对于更动态的替换,您可以将回调传递给.replace
,或者$&
在替换字符串中使用匹配的子字符串替换。
如果arrayOfTexts
可能在正则表达式中包含具有特殊含义的字符,则在传递给 之前将它们传递给转义函数new RegExp
。
推荐阅读
- python-3.x - 无法使用 python 连接到 Teradata 16
- image-processing - 图像处理:对连续值进行约束的优化
- firebase - 使用 storage().bucket().file(fileName).save(file) 包含自定义元数据
- postgresql - 将 PostgreSQL 间隔转换为秒会产生错误的值
- java - DialogFragment:显示第一个对话框,在正面按钮上,显示第二个对话框,在第二个对话框上再次显示第一个对话框
- android - 通过公司 smtp 服务器使用 android 应用程序发送电子邮件
- r - R 如何读取 ENVI .hdr 文件?
- android - 如何创建这个只有一侧和短长度的小型自定义底部下划线视图?
- html - 在引导程序 4 中使用 flex 在移动设备上对齐列表项中心
- java - java中的普通指令和快速指令有什么区别(例如aload和fast_aload)