0

嗨,我有这个正则表达式。

/^[\w]|[åäöæøÅÄÖÆØ]$/

“tå”是可以的,但“åå”不是。这是为什么?如何让它接受以 åäöæøÅÄÖÆØ 开头的单词?

4

2 回答 2

4

请注意\w(and \W, \b, and \B) 是以英语为中心的\wjust 表示[A-Za-z0-9_],其中A-Z仅表示 26 个英文字母。JavaScript 的内置字符类不将其他字母视为“单词”的一部分。

您需要构建一个字符类,包括您要视为单词字符的所有字母(然后在“非单词字符”的任何地方使用否定版本)。

但这不是唯一的问题。你的正则表达式说:

在字符串的开头匹配一个英文单词字符,在字符串的末尾匹配此字符列表之一。

操作员相当贪婪,在这种|情况下,它将^[\w][åäöæøÅÄÖÆØ]$作为替代。我没有得到你想要的印象。

“tå”是可以的,但“åå”不是。

我想这取决于您所说的“确定”是什么意思。两者都匹配表达式:

console.log("tå".match(/^[\w]|[åäöæøÅÄÖÆØ]$/)); // ["t", index: 0, input: "tå"]
console.log("åå".match(/^[\w]|[åäöæøÅÄÖÆØ]$/)); // ["å", index: 1, input: "åå"]

"tå"匹配,因为它匹配^[\w]替代项。"åå"匹配,因为它匹配[åäöæøÅÄÖÆØ]$替代项。

如何让它接受以 åäöæøÅÄÖÆØ 开头的单词?

如果目标是只接受只包含一个单词的字符串,其中“单词”包括数字和下划线(因为\w确实如此),那么:

/^[A-Za-z0-9_åäöæøÅÄÖÆØ]+$/
于 2013-06-20T08:25:45.253 回答
0

为什么你认为它失败了?我不会将 \w 放在方括号中,但各种系统似乎都允许这样做,并且以下两者都与正在测试的文本匹配。

Javascript

var test = 'åå';
if (test.match(/^[\w]|[åäöæøÅÄÖÆØ]$/)) { alert("Match"); }

PHP

echo(preg_match("/^[\w]|[åäöæøÅÄÖÆØ]$/","åå")."</br>");

你想在这里达到什么目的?

于 2013-06-20T09:39:48.677 回答