Regex赢得'不要像预期的那样匹配单词

Regex won't match words as expected

本文关键字:单词 赢得 Regex      更新时间:2023-09-26

我正试图使用XRegExp根据以下标准测试字符串是否为有效单词:

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

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

你好不能Alah'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;
};

我认为您需要省略字符串开始/结束锚来匹配单个单词:

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

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

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

试试这个正则表达式:

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

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