3

次の 3 つの形式の文字列を見つけようとしています。

ab10
ab 10
ab-10

これまでのところ、この正規表現を作成することができました。

/\s+[a-zA-Z]{2}[-|\s.]?\d{2,3}\s+/

次のようなテキストで機能します。

start foo ab 10 end foo.

問題は、検索された文字列が次のようにテキストの先頭または末尾にある場合に発生します。

ab 10 end foo.

この場合、先頭に空白はありません。そのため、文字列がテキストの先頭 (または末尾) にある場合は一致する必要がありますが、その方法がわかりません

誰か助けてくれませんか?

4

2 に答える 2

2

これで問題が解決するはずです:

/\b[a-zA-Z]{2}[-|\s.]?\d{2,3}\b/

\bは単語境界を意味し、一方 (現在位置の前または後) が非単語文字であり、もう一方が単語文字 (で定義される単語文字) であることを表明し\wます。

のような文字列がある場合は、引き続き一致することに注意して#ab10.くださいab10。しかし、 は単語の文字である_ab10ため、一致しません。_

検索する文字列の前後の文字が空白文字 (で定義されている) である必要があることを主張したい場合\s、または行の開始/終了。後読みと先読みのゼロ幅アサーションを使用します。

/(?<=^|\s)[a-zA-Z]{2}[-|\s.]?\d{2,3}(?=\s|$)/

上記の正規表現は、#ab10.またはab10.

于 2012-11-21T12:39:45.143 に答える
1

単語の境界が必要だと思います \b

/\b[a-zA-Z]{2}[-|\s.]?\d{2,3}\b/

ここでRegexrを参照してください

これは、前に単語文字がなく、後に単語文字がない場合に一致します。

\w単語文字は、文字、数字、およびアンダースコアである定義済みの文字クラスのメンバーです。

于 2012-11-21T12:39:19.660 に答える