正则表达式与特殊字符

时间:2013-06-20 08:21:12

标签: javascript regex

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

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

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

2 个答案:

答案 0 :(得分:4)

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

你需要建立一个包含你想要作为单词字符处理的所有字母的字符类(然后在你“非单词字符”的任何地方使用否定版本)。

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

  

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

|运算符非常贪婪,在这种情况下,它会将^[\w][åäöæøÅÄÖÆØ]$视为替代方案。我没有得到你想要的印象。

  

“tå”没问题,但“åå”不是。

我想这取决于“ok”的意思。两者都匹配表达式:

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

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

  

如何让它接受以åäöæøÅ?ÖÆØ?

开头的单词

如果目标是只接受包含一个单词的字符串,其中“word”包含数字和下划线(自\w起),则:

/^[A-Za-z0-9_åäöæøÅÄÖÆØ]+$/

答案 1 :(得分:0)

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

的Javascript

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

PHP

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

你想在这里实现什么目标?

相关问题