Javascript 正则表达式 UTF-8
Javascript RegEx UTF-8
我知道 JavaScript 的 RegEx 只支持 ASCII 字符串上的 \b 字边界 class。但是我能做些什么来让它与 UTF-8 字符一起工作吗?
我已经在 Whosebug 上阅读了几篇关于它的帖子,并尝试了一些方法,例如here。
但我还是无法让它工作。
我有一个页面,询问用户的姓名。
在文本框中键入后,将显示回复,使用文本框中的部分值来问候用户,并忽略其他部分。
如果用户键入 "My name is John",回复将是 "Hello, john! Nice to meet you!"。
这在英语中运行良好,但该页面将使用几种不同的语言,使用 é á ó ã ñ 等字符...当这些字符不属于名称时,我如何让它忽略这些字符?
这就是我正在使用的:
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, '')
但是当它们是 words/names 的一部分而不是当它们被用作单个单词时(这就是我想要的),这会删除这些字符。
按照 link 上的示例,我也尝试了:
answer = answer.replace(/(^|[ \n\r\t.,'"+!?-]+)(é|á|ó|ñ|õ|hello|my|name|is)([ \n\r\t.,'"\+!?-]+|$)/g, '').trim();
但它仍然没有按预期工作...
我该如何解决这个问题?
再次声明:不知道这是否是您要找的答案。这也将重新调整名称的第一个字母。所以如果我写 "My name is Salvador Dalí" 答案是:"Hello, Salvador Dalí! Nice to meet you!"
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>
我知道 JavaScript 的 RegEx 只支持 ASCII 字符串上的 \b 字边界 class。但是我能做些什么来让它与 UTF-8 字符一起工作吗?
我已经在 Whosebug 上阅读了几篇关于它的帖子,并尝试了一些方法,例如here。
但我还是无法让它工作。
我有一个页面,询问用户的姓名。
在文本框中键入后,将显示回复,使用文本框中的部分值来问候用户,并忽略其他部分。
如果用户键入 "My name is John",回复将是 "Hello, john! Nice to meet you!"。
这在英语中运行良好,但该页面将使用几种不同的语言,使用 é á ó ã ñ 等字符...当这些字符不属于名称时,我如何让它忽略这些字符?
这就是我正在使用的:
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, '')
但是当它们是 words/names 的一部分而不是当它们被用作单个单词时(这就是我想要的),这会删除这些字符。
按照 link 上的示例,我也尝试了:
answer = answer.replace(/(^|[ \n\r\t.,'"+!?-]+)(é|á|ó|ñ|õ|hello|my|name|is)([ \n\r\t.,'"\+!?-]+|$)/g, '').trim();
但它仍然没有按预期工作...
我该如何解决这个问题?
再次声明:不知道这是否是您要找的答案。这也将重新调整名称的第一个字母。所以如果我写 "My name is Salvador Dalí" 答案是:"Hello, Salvador Dalí! Nice to meet you!"
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>