替换先生和夫人的正则表达式

时间:2016-10-27 15:41:22

标签: javascript regex

我需要一个正则表达式来替换字符串的第一部分(先生或女士 - ),例如"先生。一些名字"或" Ms。一些名字"与他们完全相同。所以"先生。一些名字"变成"先生有些名字"并且"想念一些名字"。我可以为每个案例分别做到这一点:

function fn(str) {
  if (/^Mr./.test(str)) {
    return str.replace(/^Mr./, "Mister");
  }
  else if (/^Ms./.test(str)) {
    return str.replace(/^Ms./, "Miss");
  }
}

console.log(fn("Ms. Name")) // will output "Miss Name"

但我觉得它应该有一个字符串"溶液

5 个答案:

答案 0 :(得分:4)

要在一次操作中完成,这样做:

var url = window.location.href;  //Get URL

if (url.indexOf("/de/") !== -1) {    //If URL Contains /de/
  $('.en').hide();
} else {
  $('.de').hide();
}
  1. 使用匹配两种可能情况的正则表达式str.replace(/^M(r|s)\./, function(m) { return { 'Mr.': 'Mister', 'Ms.': 'Miss' }[m]; });
  2. 使用回调函数找出匹配的值并将其转换为结果,在此处使用简单的键值对象完成。
  3. 虽然在这种简单的情况下这可能很简单,但这种方法很快就会变得非常复杂和难以理解。做个别更换可能是更明智的选择。

答案 1 :(得分:2)

正则表达式不适合这里。

正则表达式解决方案都必须将每个特定前缀重新匹配到非图案扩展值。

这意味着我们必须将我们的前缀匹配两次(deceze'解决方案),或者对.replace()(Uriel Eli的解决方案)进行多余调用,以便将此解决方案强加给一个或多个常规解决方案表达式。

这是浪费和过于复杂的。 String.prototype.substring().replace()更合适,因为问题无法充分推广到模式。

function (name) {
    return ("Mr." == name.substring(0,3))?"Mister"+name.substring(3):name;
}

不要替换" Ms。"与"小姐&#34 ;;请查看@prander的链接以获得解释。

答案 2 :(得分:1)

使用"^Mr\."作为正则表达式。

.没有转义匹配每个角色。

和一行:

str = str.replace("^Mr\.", "Mister").replace("^Ms\.", "Miss");

答案 3 :(得分:1)

或没有正则表达式:

var transform =  str => str.split(" ").map((word, index) => {
     if (index === 0 && word === "Mr") return "Mister";
     if (index === 0 && word === "Ms") return "Miss";
     return word;
}).join(" ");

答案 4 :(得分:1)

我认为您也可以像这样index.html使用正则表达式并检查匹配的组是否存在:

^M((r)|s)\.