我正在尝试使用javascript代码在某些文本中查找网址。问题是,我正在使用的正则表达式使用\ w来匹配URL中的字母和数字,但它与非英语字符(在我的情况下是希伯来字母)不匹配。
那么我可以使用什么代替\ w来匹配所有语言中的所有字母?
答案 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。