2017-04-19 43 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));

相關問題