10

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

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

4

10 回答 10

17

因为\w只匹配 ASCII 字符 48-57 ('0'-'9')、67-90 ('A'-'Z') 和 97-122 ('a'-'z')。希伯来语字符和其他特殊外语字符(例如,变音符号-o 或波浪号-n)不在该范围内。

与其匹配外语字符(它们有很多,在许多不同的 ASCII 范围内),不如寻找描述单词的字符 - 空格、引号和其他标点符号。

于 2008-12-29T14:22:06.237 回答
7

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

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

[\u0590-\u05FF]

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

您可以匹配任何 ASCII 单词字符或任何希伯来字符:

[\w\u0590-\u05FF]
于 2008-12-30T13:33:53.790 回答
6

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

^[אבגדהוזחטיכלמנסעפצקרשתץףןםa-zA-z0-9\s\.\-_\\\/]+$
于 2010-09-16T06:33:19.930 回答
3

我刚刚找到了尚未提及的XRegExp ,我对它印象深刻。它是一种替代的正则表达式实现,有一个unicode 插件,并在 MIT 许可下获得许可。

根据该网站,要匹配 unicode 字符,您将使用这样的代码:

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

unicodeWord.test("Русский"); // true
unicodeWord.test("日本語"); // true
unicodeWord.test("العربية"); // true
于 2011-09-16T09:26:50.053 回答
2

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

于 2013-04-26T16:02:40.617 回答
1

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

看起来没有 \w 等效于 unicode,但您可以匹配单个 unicode 字母,因此您可以创建它。

于 2008-12-29T14:22:33.210 回答
1

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

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

于 2008-12-29T14:22:51.650 回答
1

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

在本地或区域环境中,随着技术的进步,用户可能会受益于能够使用更广泛的字符;本规范未定义此类使用。如果方案或引用 URI 的协议元素允许这种表示,则可以在 URI 中使用百分比编码的八位字节(第 2.1 节)来表示 US-ASCII 编码字符集范围之外的字符。这样的定义应该指定用于在对 URI 进行百分比编码之前将这些字符映射到八位字节的字符编码。// URI:通用语法

当您在浏览器中打开带有非 ASCII 字符的 URL 时,通常会发生这种情况,它们会被转换为 %AB 表示法,而后者又US-ASCII。

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

于 2008-12-30T14:50:20.360 回答
0

也许 \S (非空白)。

于 2008-12-29T14:21:14.070 回答
0

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

如果我正确解释了 W3C,则 URL 可能只包含 latin alphabet 中的单词字符

于 2008-12-29T15:36:38.053 回答