为什么\ w只匹配javascript正则表达式中的英文单词?

时间:2008-12-29 14:17:13

标签: javascript regex hebrew

我正在尝试使用javascript代码在某些文本中查找网址。问题是,我正在使用的正则表达式使用\ w来匹配URL中的字母和数字,但它与非英语字符(在我的情况下是希伯来字母)不匹配。

那么我可以使用什么代替\ w来匹配所有语言中的所有字母?

10 个答案:

答案 0 :(得分:17)

因为\w仅匹配ASCII字符48-57('0' - '9'),67-90('A' - 'Z')和97-122('a' - 'z' )。希伯来字符和其他特殊外语字符(例如,umlaut-o或tilde-n)超出该范围。

除了匹配外语字符(在很多不同的ASCII范围内有很多这样的字符)之外,最好还是找一些描述你单词的字符 - 空格,引号和其他标点符号。

答案 1 :(得分:6)

ECMA 262 v3标准定义了通常称为JavaScript的编程语言,规定\w应等同于[a-zA-Z0-9_],而\d应相当于[0-9]。另一方面,\s根据标准匹配ASCII和Unicode空白。

JavaScript也不支持匹配Unicode内容的\p语法,因此没有好方法可以做到这一点。您可以将所有希伯来字符与:

匹配
[\u0590-\u05FF]

这只是匹配希伯来语块中的任何代码点。

您可以将任何ASCII字符或任何希伯来字符与:

匹配
[\w\u0590-\u05FF]

答案 2 :(得分:5)

我认为你正在寻找这个正则表达式:

^[אבגדהוזחטיכלמנסעפצקרשתץףןםa-zA-z0-9\s\.\-_\\\/]+$

答案 3 :(得分:3)

我刚刚发现XRegExp尚未提及,我对此印象深刻。它是一个替代的正则表达式实现,具有unicode plugin并且在MIT许可下获得许可。

根据该网站,为了匹配unicode字符,你可以使用这样的代码:

var unicodeWord = XRegExp("^\\p{L}+$");

unicodeWord.test("Русский"); // true
unicodeWord.test("日本語"); // true
unicodeWord.test("العربية"); // true

答案 4 :(得分:2)

试试这个\ p {L} unicode regex to Letters

答案 5 :(得分:1)

看看http://www.regular-expressions.info/refunicode.html

看起来没有\ w等效的unicode,但你可以匹配单个unicode字母,所以你可以创建它。

答案 6 :(得分:1)

检查this SO Question about JavaScript and Unicode。看起来Jan Goyvaerts的答案为你提供了一些希望。

编辑:但似乎所有浏览器都不支持\ p ...无论如何。那个问题应该包含有用的信息。

答案 7 :(得分:1)

请注意,W3C指定URI(作为URL的超集)仅允许使用US-ASCII字符。 通常,所有其他字符应以百分比表示:

  

在当地或地区的情况下和   用户可能会改进技术   受益于能够使用更广泛的   字符范围;这种用途不是   由本规范定义。   百分比编码的八位字节(第2.1节)   可以在URI中使用来表示   超出范围的字符   如果是这样,US-ASCII编码字符集   代表是允许的   方案或协议要素   其中引用了URI。这样的   定义应该指定   用于映射那些的字符编码   字符到八位字节之前   为URI编码的百分比。 // URI: Generic Syntax

当您在浏览器中打开包含非ASCII字符的URL时,通常会发生这种情况,它们会被转换为%AB符号,而 US-ASCII。

如果可以影响材料的创建方式,最好的选择是在创建过程中将URL设置为urlencode()类型函数。

答案 8 :(得分:0)

也许\ S(非空白)。

答案 9 :(得分:0)

如果您是生成包含非英文字母的网址的人,则可能需要重新考虑。

如果我正确解释W3C,URLs may only contain word characters within the latin alphabet