在正则表达式中匹配非ascii字符的最简单方法是什么?我想在输入字符串中单独匹配所有单词,但语言可能不是英语,所以我需要匹配ü、ö、ß和ñ之类的东西。此外,这是在Javascript/jQuery,所以任何解决方案将需要应用于此。


当前回答

我有一个问题与\p工作如预期,所以我只是使用了不同的策略,如:

([^\t]+)\t

找到任何不是制表符,直到下一个制表符…显然,这取决于你的搜索源,但你明白我的意思。现在我不需要弄清楚unicode字符什么有用,什么没用等等。

其他回答

这应该做到:

[^\x00-\x7F]+

它匹配ASCII字符集(0-127,即0x0到0x7F)中不包含的任何字符。

你可以用Unicode做同样的事情:

[^\u0000-\u007F]+

对于unicode,您可以查看以下两个资源:

Unicode范围的代码图表列表 此工具用于创建一个由Unicode块过滤的正则表达式。

所有支持Unicode的Regex类型都应该有一个特殊的字符类,比如\w,可以匹配任何Unicode字母。看看你的特殊口味吧。

Jeremy Ruten给出的答案很好,但我认为这并不是Paul Wicks所寻找的。如果我没理解错的话,Paul问的是匹配非英语单词können或móc的表达式。Jeremy的正则表达式只匹配非英文字母,所以需要进行小的改进:

([^\x00-\x7F]|\w)+

or

([^\u0000-\u007F]|\w)+

这个[^\x00-\x7F]和这个[^\u0000-\u007F]部分允许正则表达式匹配非英文字母。

这(|)是逻辑或,\w是英文字母,所以([^\u0000-\u007F]|\w)将匹配单个英文或非英文字母。

在表达式末尾的+表示它可以重复,因此整个表达式允许所有英语或非英语字母匹配。

这里您可以用各种字符串测试第一个表达式,这里是第二个表达式。

正则表达式、Unicode和Javascript的情况糟透了。程序员必须依赖外部库来识别“Αλφα”是一个单词,甚至“é”是一个字母,这是荒谬的。

但事情就是这样。

这家伙写了一个很好的库来处理Javascript正则表达式中的Unicode:

http://blog.stevenlevithan.com/archives/javascript-regex-and-unicode

Unicode的东西是这个正则库的一个插件:

http://xregexp.com/

这是一篇关于Unicode扩展的文章:

http://blog.stevenlevithan.com/archives/xregexp-unicode-plugin

和扩展页面本身:

http://xregexp.com/plugins/

很棒的工作,但Javascript在这方面的落后仍然让我感到沮丧。

(他为奥莱利写了一本关于这个话题的书,所以他很可能知道自己在说什么。)

他实现它的方法是通过添加具有特定属性的字符表。然后,当你用他的库构造一个正则表达式时,\p{charclass}被替换为[allcharactertersinclass]。

我有一个问题与\p工作如预期,所以我只是使用了不同的策略,如:

([^\t]+)\t

找到任何不是制表符,直到下一个制表符…显然,这取决于你的搜索源,但你明白我的意思。现在我不需要弄清楚unicode字符什么有用,什么没用等等。