15

文字数をカウントしたいのですが、一致しない文字で区切られている場合があります。

ここに例があります。単語文字が 10 文字以上のテキストに一致させたい。スペースが含まれる場合がありますが、スペースを数えたくありません。

一致しない: "foo bar baz" (9 カウントする必要がある)一致
ない: "a a" (2 カウントする必要がある)
一致する必要がある: "foo baz bars" (10 カウントする必要がある、文字列全体に一致する)

これは私が思いついたものですが、それはすべてを数えます:

((?<=\s)*\w(?=\s)*){10}

編集カウント用のスペースを含めたくありません。申し訳ありませんが、これを数回編集しましたが、正しく説明していませんでした。

これに関するアイデアはありますか?

4

3 に答える 3

18

ねえ、これはシンプルだが機能するものだと思う:

( *?[0-9a-zA-Z] *?){10,}

正規表現を分解する:

  1. ( *? --------It can start with space(s)
  2. [0-9a-zA-Z] -Followed with the alphanumeric values
  3. *?) ---------It can end with space(s)
  4. {10,} -------Matches this pattern 10 or more times

重要: 正規表現のカウントを見ると、それはグループに適用されます。つまり、角かっこ " ()" 内のものです。この場合、複数のスペースに続いて英数字の値から 1 つが続き、その後にスペースが続く場合でも、1 つの一致としてカウントされます。それが役に立てば幸い。:)

于 2013-08-09T15:02:17.350 に答える
6

単語 char ごとにスペースを消費するグループを使用し、グループを数えます。

^(\s*\w){10,}\s*$
于 2013-08-09T10:42:32.150 に答える
3

JS の使用:スペースを削除してから\wチェックを行う

'foo baz barz'.replace(/ /g,'').match(/\w{10,}/) != null //true
'foo bar baz'.replace(/ /g,'').match(/\w{10,}/) != null //false

テキスト内の電話番号を一致させる:

var test = 'something foo baz barz 07999-777-111 and 01234 567890 01234567890 some more'.match(/((\(?0\d{4}\)?[ -]?\d{3}[ -]?\d{3})|(\(?0\d{3}\)?[ -]?\d{3}[ -]?\d{4})|(\(?0\d{2}\)?[ -]?\d{4}[ -]?\d{4}))([ -]?\#(\d{4}|\d{3}))?/g);
//result: ["07999-777-111", "01234 567890", "01234567890"]
于 2013-08-09T10:58:40.330 に答える