如何在javascript中保留标点符号的同时替换句子中的单词?

时间:2017-04-19 23:42:51

标签: javascript

我想搜索邮件的内容,并将某些单词替换为与具有翻译的单词匹配的单词。

示例输入: “我和我的bae一起拍了一个自拍。 YOLO!

过滤后的输出: “我和我所爱的人在旁边拍了一张自画像。 carpe diem!'

我的代码正在翻译单词,但只有没有额外标点符号的单词附加到像'。'这样的单词上。和'!'。即它转换为:'我用我的bae拍了一幅自画像。 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(' '));
};

3 个答案:

答案 0 :(得分:1)

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

&#13;
&#13;
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));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

查看此片段!

createTransporter

答案 2 :(得分:0)

您可以使用.split(/\b/)拆分字边界上的字符串

以下是一个例子:

&#13;
&#13;
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));
&#13;
&#13;
&#13;