2017-04-19 6 views
2

私はメッセージの内容を検索し、特定の単語を、翻訳されたものと一致する単語に置き換えたいと考えています。JavaScriptで句読点を維持したまま、文章内の単語を置き換えるにはどうすればよいですか?

入力の例: '私はテルディーズの隣に私のベーとセルフをしました。よろしく!

フィルタ処理された出力: '私は、恋人の肖像画をタルディの隣で撮りました。今を楽しめ!'

私のコードは単語を翻訳していますが、「。」のような単語には余分な句読点が付いていない単語のみが翻訳されています。と '!'。すなわち、「私は私のベーと一緒に自分の肖像画を撮った。よろしく!

私は単語とその翻訳の対象と始めています:ここで

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'関数内の2番目の引数(コールバック関数)の引数です。一致した要素を、その関数が返す指定された要素に置き換えます。 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));

関連する問題