我正在尝试使用 javascript 代码在某些文本中查找 URL。问题是,我使用的正则表达式使用 \w 来匹配 URL 中的字母和数字,但它不匹配非英语字符(在我的情况下 - 希伯来字母)。
那么我可以用什么代替 \w 来匹配所有语言的所有字母?
我正在尝试使用 javascript 代码在某些文本中查找 URL。问题是,我使用的正则表达式使用 \w 来匹配 URL 中的字母和数字,但它不匹配非英语字符(在我的情况下 - 希伯来字母)。
那么我可以用什么代替 \w 来匹配所有语言的所有字母?
因为\w
只匹配 ASCII 字符 48-57 ('0'-'9')、67-90 ('A'-'Z') 和 97-122 ('a'-'z')。希伯来语字符和其他特殊外语字符(例如,变音符号-o 或波浪号-n)不在该范围内。
与其匹配外语字符(它们有很多,在许多不同的 ASCII 范围内),不如寻找描述单词的字符 - 空格、引号和其他标点符号。
定义通常称为 JavaScript 的编程语言的 ECMA 262 v3 标准规定\w
应该等价于 [a-zA-Z0-9_] 并且\d
应该等价于 [0-9]。\s
另一方面,根据标准匹配 ASCII 和 Unicode 空白。
JavaScript 也不支持\p
匹配 Unicode 事物的语法,因此没有很好的方法来做到这一点。您可以将所有希伯来语字符与:
[\u0590-\u05FF]
这只是匹配希伯来语块中的任何代码点。
您可以匹配任何 ASCII 单词字符或任何希伯来字符:
[\w\u0590-\u05FF]
我认为您正在寻找这个正则表达式:
^[אבגדהוזחטיכלמנסעפצקרשתץףןםa-zA-z0-9\s\.\-_\\\/]+$
我刚刚找到了尚未提及的XRegExp ,我对它印象深刻。它是一种替代的正则表达式实现,有一个unicode 插件,并在 MIT 许可下获得许可。
根据该网站,要匹配 unicode 字符,您将使用这样的代码:
var unicodeWord = XRegExp("^\\p{L}+$");
unicodeWord.test("Русский"); // true
unicodeWord.test("日本語"); // true
unicodeWord.test("العربية"); // true
试试这个 \p{L} unicode regex to Letters
看看http://www.regular-expressions.info/refunicode.html。
看起来没有 \w 等效于 unicode,但您可以匹配单个 unicode 字母,因此您可以创建它。
检查this SO Question about JavaScript and Unicode out。看起来 Jan Goyvaerts 的回答为您提供了一些希望。
编辑:但是似乎所有浏览器都不支持 \p ...无论如何。该问题应包含有用的信息。
请注意,W3C 指定 URI(作为 URL 的超集)仅允许使用 US-ASCII 字符。通常所有其他字符都应该用百分号表示:
在本地或区域环境中,随着技术的进步,用户可能会受益于能够使用更广泛的字符;本规范未定义此类使用。如果方案或引用 URI 的协议元素允许这种表示,则可以在 URI 中使用百分比编码的八位字节(第 2.1 节)来表示 US-ASCII 编码字符集范围之外的字符。这样的定义应该指定用于在对 URI 进行百分比编码之前将这些字符映射到八位字节的字符编码。// URI:通用语法
当您在浏览器中打开带有非 ASCII 字符的 URL 时,通常会发生这种情况,它们会被转换为 %AB 表示法,而后者又是US-ASCII。
如果可以影响材料的创建方式,最好的选择是在创建过程中将 URL 置于 urlencode() 类型函数中。
也许 \S (非空白)。
如果您是生成其中包含非英文字母的 URL 的人,您可能需要重新考虑。
如果我正确解释了 W3C,则 URL 可能只包含 latin alphabet 中的单词字符。