ブロックを に配置することで、ブロックをオプションにすること( ... )?
が( ... ){0,1}
できます。
あなたの式は次のようになります。
/([0-2][0-9])((.|:)([0-5][0-9]))?/
12
これは 、12:30
および に一致し12.30
ます。5
、5:30
、またはには一致しません5.30
。1 桁の時間入力を有効にするには、最初の桁をオプションにします。
/([0-2]?[0-9])((.|:)([0-5][0-9]))?/
を使用している場合.match
は、5 つの結果があることがわかります。
["12:30", "12", ":30", ":", "30"]
( ... )
に変わるときに不要なマッチングを排除することで、それを3つに減らすことができます(?: ... )
/([0-2]?[0-9])(?:(?:.|:)([0-5][0-9]))?/
これにより、以下が得られます。
["12:30", "12", "30"]
アップデート
更新に基づいて、境界を一致させたいと考えています。これを行うにはいくつかの方法があります。
- で開始する
^
と、式の先頭が各行/文字列の先頭に結び付けられます。
$
で終わると、式の末尾が文字列の末尾に結び付けられます。
- で始まるか終わると
\b
、エッジが「境界」に対してあることが義務付けられます。
それをすべてまとめると:
日付のみを含む行を一致させたい場合は、次のようにします。
/^([0-2]?[0-9])(?:(?:.|:)([0-5][0-9]))?$/
これは、「hello 1.30」または「1.30 hello」をキャッチしません。
日付で始まる行を一致させたい場合は、次を使用できます。
/^([0-2]?[0-9])(?:(?:.|:)([0-5][0-9]))?/
しかし、これは「1.30000」に一致します。
行頭の日付を探している場合の最善の策は次のとおりです。
/^([0-2]?[0-9])(?:(?:.|:)([0-5][0-9]))?\b/
「1.30 test」には一致しますが、「1.300000」には一致しません。残念ながら、「1.30.30」にも一致しますが、これは JavaScript の RegExp プロセッサの制限です。
文字列内の時間を探している場合、これは次のようになります。
/\b([0-2]?[0-9])(?:(?:.|:)([0-5][0-9]))?\b/
「test 1.30 test」は、「.10.10.10」のような一致する不幸なケースと一致します。