我知道 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();
但它仍然无法按预期工作......
我怎样才能解决这个问题?