我这里有一个数组,有一个值和一个字符串,我需要的是,如果数组中的任何一个值,在字符串中得到匹配,它应该用空替换匹配的字符串,现在我在函数中做这个,我假设回调值,但我不知道我做错了什么。
附加以下代码
async function ok (){
var arr = ['one', 'two', 'three'];
var addressLine = 'This is one'
const ans = await matchAndRemove(arr, addressLine)
console.log(`This is address ${addressLine}`)
// Out put is 'This is address This is one' but here I expect the output as 'This is'
console.log(`This is match ${ans}`) // Output is 'This is match one'
}
const matchAndRemove = (arr, addressLine) => {
for (var val of arr) {
if (addressLine.toLowerCase().indexOf(val.toLowerCase()) != -1) {
const match = addressLine.match(new RegExp(val, 'ig')).join(' ');
addressLine = addressLine.replace(new RegExp(val, 'ig'), '');
console.log(addressLine) // Output is 'This is'
return match;
}
}
}
ok()
有什么建议来解决这个问题吗?
2条答案
按热度按时间jhdbpxl91#
你的函数不能修改
addressLine
,因为JavaScript没有引用调用(而且字符串是不可变的)。如果你想修改那个字符串的值,你也可以返回它。因此,返回
addressLine
的匹配值和新值,您可以将其作为一个对(数组)返回,调用者可以将该对重新构造为单独的变量。注意:不需要
await
,因为不涉及异步API更正:
这不是您的问题,但使用 * one * 正则表达式可能更有趣,而不是需要逐个检查的单词数组:
jaxagkaj2#
您的代码在for循环中返回match的值。这就是为什么找到第一个匹配项后函数会关闭的原因。您应该将匹配项存储在数组中,然后将它们连接起来以获得最终结果。请尝试以下操作: