2017-04-19 83 views
2

我想搜索消息的内容并将某些单词替换为与具有翻译的单词相匹配的单词。如何在保持标点符号的同时在句子中替换单词?

示例输入: '我用裴勇俊旁边的自拍拍照。 YOLO!”

已过滤输出: '我在tardis旁边与我的亲人拍了一幅自画像。及时行乐!'

我的代码正在翻译单词,但只有那些没有附加标点符号的单词如'。'。和'!'。即它转化为:'我用我的裴看了一幅自画像。 YOLO!”

我开始用文字和他们的翻译对象:

let blacklist = { 
    'selfie': 'self-portrait', 
    'yummers': 'delicious', 
    'outchea': 'are out here', 
    'bruh': 'wow', 
    'doge': 'pug', 
    'cilantro': 'soap', 
    'bae': 'loved one', 
    'swag': 'style', 
    'yolo': 'carpe diem' 
}; 

这里是我的代码翻译的话:

const message = 'I took a selfie with my bae next to a tardis. yolo!' 

translate(message) => { 
    let wordArray = message.split(' '); 
    for(let i = 0; i < wordArray.length; i++) { 
    if(blacklist.hasOwnProperty(wordArray[i])){ 
     wordArray[i] = blacklist[wordArray[i]]; 
    } 
    } 
    console.log(wordArray.join(' ')); 
}; 
+1

您能给我们e'.split(/ \ b /)' – Titus

回答

1

我建议你一个更简单的方法。使用RegExp对象,您不必关心标点符号的相等性。

let blacklist = { 
 
    'selfie': 'self-portrait', 
 
    'yummers': 'delicious', 
 
    'outchea': 'are out here', 
 
    'bruh': 'wow', 
 
    'doge': 'pug', 
 
    'cilantro': 'soap', 
 
    'bae': 'loved one', 
 
    'swag': 'style', 
 
    'yolo': 'carpe diem' 
 
}; 
 

 
const message = 'I took a selfie with my bae next to a tardis. yolo!'; 
 

 
function translate(message) { 
 
    return message.replace(/selfie|yummers|outchea|bruh|doge|cilantro|bae|swag|yolo/g, match => blacklist[match]); 
 
}; 
 

 
console.log(translate(message));

+0

很干净!但是,“匹配”是如何工作的?我无法在文档中找到它。 –

+0

'RegExp'在这种情况下可以使用,但不可扩展(例如,如果数组增长)。 – Felix

+0

@ColinSygiel匹配是'replace'函数中第二个参数(这是一个回调函数)的参数。它用该函数返回的指定元素替换匹配的元素。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace –

1

退房这个片段!

function translate(words) { 
 
    var arrayWord = { 
 
     selfie: 'self-portrait', 
 
     yummers: 'delicious', 
 
     outchea: 'are out here', 
 
     bruh: 'wow', 
 
     doge: 'pug', 
 
     cilantro: 'soap', 
 
     bae: 'loved one', 
 
     swag: 'style', 
 
     yolo: 'carpe diem' 
 
    }; 
 

 
    for (var key in arrayWord) { 
 
     words = words.replace(new RegExp(key, "ig"), arrayWord[key]); 
 
    } 
 
    return words.charAt(0).toUpperCase() + words.slice(1); 
 
} 
 
var translatedString = translate("I took a selfie with my bae next to a tardis. yolo!"); 
 
console.log(translatedString);

0

您可以使用.split(/\b/)拆分单词边界

这里的字符串是一个例子:

var blacklist = { 
 
    'selfie': 'self-portrait', 
 
    'yummers': 'delicious', 
 
    'outchea': 'are out here', 
 
    'bruh': 'wow', 
 
    'doge': 'pug', 
 
    'cilantro': 'soap', 
 
    'bae': 'loved one', 
 
    'swag': 'style', 
 
    'yolo': 'carpe diem' 
 
}; 
 

 
var message = 'I took a selfie with my bae next to a tardis. yolo!' 
 

 
function translate(message){ 
 
    return message.split(/\b/).map(w => (blacklist[w] || w)).join(''); 
 
}; 
 
    
 
console.log(translate(message));

相关问题