0

我知道 JavaScript 的 RegEx 仅支持 ASCII 字符串上的 \b 字边界类。但是我能做些什么来让它与 UTF-8 字符一起工作吗?

我在 stackoverflow 上阅读了几篇关于它的文章,并尝试了一些方法,比如这里描述的方法。

但我仍然无法让它工作。

我有一个页面询问用户他的名字。

在文本框中输入后,将显示回复,使用文本框中的部分值来问候用户,而忽略它的其他部分。

如果用户输入“我的名字是约翰”,回复将是“你好,约翰!很高兴认识你!”。

这在英语中可以正常工作,但是该页面将使用几种不同的语言,这些语言使用诸如 é á ó ã ñ 之类的字符...当这些字符不是名称的一部分时,如何使其忽略这些字符?

这就是我正在使用的:

function myFunction() {
    var text;
    var answer = document.getElementById("myInput").value.toLowerCase();
	answer = answer.replace(/[^a-z0-9çéã\s]/g, "");
	answer = answer.replace(/\b(my|name|is|)\b/g, '').trim();

    switch(answer) {
        case "":
            text = "Please type something.";
        break;
        default:
        text = "Hello, " + answer + "! Nice to meet you!";
    }
    document.getElementById("reply").innerHTML = text;
}
<p>What is your name?</p>

<input id="myInput" type="text">

<button onclick="myFunction()">Go</button>

<p id="reply"></p>

我试过.replace(/á|é|ó|\b(my|name|is)\b/g, '') 但是当它们是单词/名称的一部分而不是当它们被用作单个单词时(这就是我想要的),这会删​​除这些字符。

按照该链接上的示例,我还尝试了:

answer = answer.replace(/(^|[ \n\r\t.,'"+!?-]+)(é|á|ó|ñ|õ|hello|my|name|is)([ \n\r\t.,'"\+!?-]+|$)/g, '$1$3').trim();

但它仍然无法按预期工作......

我怎样才能解决这个问题?

4

1 回答 1

1

再说一遍:我不知道这是否是您正在寻找的答案。这也将重命名名称的第一个字母。所以如果我写“我的名字是萨尔瓦多·达利”,答案是:“你好,萨尔瓦多·达利!很高兴认识你!”

var myInput = document.getElementById("myInput");

function myFunction() {
  var text,
    answer = myInput.value.toLowerCase();
  answer = answer.replace("my name is ", "");

  switch (answer) {
    case "":
      text = "Please type something.";
      break;
    default:
      text = "Hello, " + CapitalizeName(answer) + "! Nice to meet you!";
  }
  document.getElementById("reply").innerHTML = text;
}

function CapitalizeName(name) {
  let _array = name.split(" ");
  let n_array = [];
  _array.map(w => {
    w = w.charAt(0).toUpperCase() + w.slice(1);
    n_array.push(w);
  });
  return n_array.join(" ");
}
<p>What is your name?</p>

<input id="myInput" type="text">

<button onclick="myFunction()">Go</button>

<p id="reply"></p>

于 2018-09-23T08:05:23.090 回答