考虑以下(glytchfull)字符串:
raybradbury la foire defiténébres
在调用 Azure 拼写检查器 API 后,我可以替换该字符串。建议如下:
"raybradbur" should be "ray bradbury"
"defiténébre" should be "de ténébres"
如您所见,只需将原始文件中的 raybradbur
替换为 ray bradbury
或将 defiténébre
替换为 de ténébres
字符串会在 ray bradburyy
中留下额外的 y
,并在 de tenebress
中留下额外的 s
。
因此,我需要找到一种方法来识别原始字符串中与 API 返回的替换项相似的单词,并将其完全替换为其替换项。
这是我到目前为止所拥有的:
let replaceInStr = function(str, tokens, length){
let versions = []
versions.push(str)
console.log(str) // -> raybradbury la foire defiténébres
for (let i = 0; i < length; i++) {
// INTELLIGENCE WARNING!
// CONSIDER IDENIFYING THE WHOLE PART OF THE STRING THAT LOOKS
// LIKE TOKEN NOT JUST TOKEN SO YOU CAN REPLACE IT
let token = tokens[i]['token'],
suggestion = tokens[i]['suggestions'][0]['suggestion'],
regExp = new RegExp(token.trim()),
replaced = versions[0].replace(regExp, suggestion)
versions.pop()
versions.push(replaced)
};
console.log(versions[0]) // -> ray bradburyy la foire de ténébress
return versions[0]
};
由于我找不到通用的方法来做到这一点,因此我们将非常感谢任何反馈或不同的方法。
最佳答案
您需要将正则表达式括起来以匹配非空格字符。
更改此行
regExp = new RegExp(token.trim()),
至
regExp = new RegExp( "[\\\S]*" + token.trim() + "[\\\S]*"),
我猜您可能想一次替换多个匹配项,因此还要添加全局标志
regExp = new RegExp( "[\\\S]*" + token.trim() + "[\\\S]*", "gi"),
i
用于不区分大小写的匹配。
g
用于匹配所有出现的情况。
关于javascript - JS : Find a look-alike word in String and replace it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47033625/