Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I have a sample code but I am looking for the most efficient solution. Sure I can loop twice through the array and string but I was wondering if I could just do a prefix search character per character and identify elements to be replaced. My code does not really do any of that since my regex is broken.

const dict = {
    '\iota': 'ι',
    '\nu': 'ν',
    '\omega': 'ω',
    '\'e': 'é',
    '^e': '?'
}
const value = 'Ko\iota\nu\omega L'\'ecole'

const replaced = value.replace(/w+/g, ($m) => {
  console.log($m)
  const key = dict[$m]
  console.log(key)
  return (typeof key !== 'undefined') ? key : $m
})

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
1.0k views
Welcome To Ask or Share your Answers For Others

1 Answer

Your keys are not fully word characters, so w+ will not match them. Construct the regex from the keys instead:

// https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
const escapeRegExp = string => string.replace(/[.*+?^${}()|[]\]/g, '\$&');

const dict = {
    '\iota': 'ι',
    '\nu': 'ν',
    '\omega': 'ω',
    '\'e': 'é',
    '^e': '?'
}
const value = 'Ko\iota\nu\omega L'\'ecole'

const pattern = new RegExp(Object.keys(dict).map(escapeRegExp).join('|'), 'g');
const replaced = value.replace(pattern, match => dict[match]);
console.log(replaced);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...