Использование str.replace для нескольких слов - PullRequest
0 голосов
/ 28 сентября 2019

Я создаю рабочий инструмент для сокращений в блокноте.Поскольку компания, в которой я работаю, строго загружает любые внешние инструменты, к которым я прибегаю, используя JavaScript и HTML, встроенные в блокнот.

Мне удалось заменить отдельные слова, например, когда я набираю «Вакансия», он возвращает «VAC».Или при вводе «Оплата» возвращает «PYMT».Моя проблема пытается заменить несколько слов в 1 маленькое сокращение.Например, «Follow Up», я хочу вернуть «F / U».С пробелами я нахожу это не работает.

Пробовал несколько способов, но не смог понять это.

Вот фрагмент кода, который я использовал

function myFunction() {

var str = document.getElementById("demo").value; 
var mapObj = {
   Payment:"PYMT",
   Vacancy:"VAC", 
str = str.replace(/Payment|Vacancy, fucntion(matched){
  return mapObj[matched];
});
alert(str);
  document.getElementById("demo").value = res;
}

Я хотел бы добавить свой mabObj, чтобы он читал

function myFunction() {

var str = document.getElementById("demo").value; 
var mapObj = {
Follow Up:"F/U"
str = str.replace(/Follow Up|, fucntion(matched){
  return mapObj[matched];
});
alert(str);
  document.getElementById("demo").value = res;
}

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

У объектов JavaScript могут быть свойства с пробелами, но для этого необходимо, чтобы имя свойства было заключено в кавычки.

Тем не менее, в этом случае я бы предложил использовать Map, поскольку это позволит вам сопоставить любую строку, не беспокоясь о именовании коллизий со свойствами из прототипа объекта.

const abbreviation = new Map([
    ['Follow Up', 'F/U'],
    ['Payment', 'PYMT'],
    ['Vacancy', 'VAC']
]);
const input = 'Payment noise Vacancy noise Follow Up noise Vacancy';
const pattern = new RegExp(Array.from(abbreviation.keys()).join('|'),'g');
const result = input.replace(pattern, (matched) => {
    return abbreviation.get(matched) || matched;
});
console.log(result);  // 'PYMT noise VAC noise F/U noise VAC'
0 голосов
/ 28 сентября 2019

Чтобы включить ключ с пробелом в объект, вы можете заключить его в квадратные скобки, например {["Follow Up"]: "F/U"}

function replaceKeyWords(str) {
  var mapObj = {
     Payment:"PYMT",
     Vacancy:"VAC",
     ["Follow Up"]:"F/U",
  };
  str = str.replace(/(Payment|Vacancy|Follow Up)/, function(matched){
    return mapObj[matched];
  });
  return str;
}

console.log(replaceKeyWords("Payment"));
console.log(replaceKeyWords("Vacancy"));
console.log(replaceKeyWords("Follow Up"));
...