正则表达式不会按预期匹配单词

时间:2012-08-06 21:50:09

标签: javascript regex xregexp

我正在尝试使用XRegExp来测试字符串是否符合以下条件:

  • 字符串以一个或多个Unicode字母开头,后跟
  • 一个撇号(')后跟一个或多个Unicode字母,重复0次或更多次。
  • 字符串在匹配的模式之后立即结束。

也就是说,它会匹配这些术语

  

你好,Alah'u'u'v'oo O'reilly不能

但不是这些

  

吃掉'直到

我正在尝试这种模式,

^(\\p{L})+('(\\p{L})+)*$

但它不会匹配任何包含撇号的单词。我做错了什么?

编辑:使用正则表达式的代码

var separateWords = function(text) {
    var word = XRegExp("(\\p{L})+('(\\p{L})+)*$");
    var splits = [];
    for (var i = 0; i < text.length; i++) {
        var item = text[i];
        while (i + 1 < text.length && word.test(item + text[i + 1])) {
            item += text[i + 1];
            i++;
        }
        splits.push(item);
    }
    return splits;
};

2 个答案:

答案 0 :(得分:2)

我认为您需要省略string start/end anchors以匹配单个词:

"(\\p{L})+('(\\p{L})+)*"

此外,我不确定需要哪些捕获组(可能取决于您的应用程序),但您可以将它们缩短为

"\\p{L}+('\\p{L}+)*"

答案 1 :(得分:0)

试试这个正则表达式:

^[^'](?:[\w']*[^'])?$

首先检查以确保第一个字符不是撇号。然后它要么获得任意数量的单词字符或撇号,后跟撇号以外的任何内容,否则它什么都没有(单字母单词)。