【问题标题】:Regex won't match words as expected正则表达式不会按预期匹配单词
【发布时间】:2012-08-06 21:50:09
【问题描述】:

我正在尝试使用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;
};

【问题讨论】:

  • 您能向我们展示您构建和应用这些正则表达式的完整代码吗?

标签: javascript regex xregexp


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    试试这个正则表达式:

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

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

    【讨论】:

    • 经过进一步审查,我发布了他正在使用 xregexp 库,所以请忽略
    猜你喜欢
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    相关资源
    最近更新 更多