2

XRegExpを使用して、文字列が次の基準に従って有効な単語であるかどうかをテストしようとしています。

  • 文字列は 1 つ以上の Unicode 文字で始まり、その後に
  • アポストロフィ ( ') の後に 1 つ以上の Unicode 文字が続き、0 回以上繰り返されます。
  • 文字列は、一致したパターンの直後で終了します。

つまり、これらの用語に一致します

Hello can't Alah'u'u'v'oo オライリー

しかし、これらではありません

食べるまで食べる

このパターンを試しているのですが、

^(\\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;
};
4

2 に答える 2

2

単一の単語に一致させるには、文字列の開始/終了アンカーを省略する必要があると思います。

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

また、これらのキャプチャ グループが何に必要なのかはわかりませんが (アプリケーションによって異なる場合があります)、次のように短縮できます。

"\\p{L}+('\\p{L}+)*"
于 2012-08-06T21:59:21.287 に答える
0

この正規表現を試してください:

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

最初に、最初の文字がアポストロフィでないことを確認します。次に、任意の数の単語文字またはアポストロフィの後にアポストロフィ以外の文字が続くか、何も取得しません (1 文字の単語)。

于 2012-08-06T21:54:58.977 に答える