1

私が構築しているアプリケーションの一部ではbash、対話型ターミナルでコマンドを評価できます。入力すると、コマンドが実行されます。もう少し柔軟にして、複数行にわたるコマンドを許可しようとしています。

末尾のバックスラッシュを既にチェックしていますが、開いている文字列があるかどうかを確認する方法を見つけようとしています。エスケープされた引用符もサポートする必要があるため、これの正規表現を書くことに成功していません。

例えば:

echo "this is a 
\"very\" cool quote"
4

1 に答える 1

2

subjectバランスの取れていない (エスケープされていない) 引用符が含まれていない場合にのみ、文字列 ( ) に一致する正規表現が必要な場合は、次のことを試してください。

/^(?:[^"\\]|\\.|"(?:\\.|[^"\\])*")*$/.test(subject)

説明:

^          # Match the start of the string.
(?:        # Match either...
 [^"\\]    #  a character besides quotes or backslash
|          # or
 \\.       #  any escaped character
|          # or
 "         #  a closed string, i. e. one that starts with a quote,
 (?:       #  followed by either
  \\.      #   an escaped character
 |         #  or
  [^"\\]   #   any other character except quote or backslash
 )*        #  any number of times,
 "         #  and a closing quote.
)*         # Repeat as often as needed.
$          # Match the end of the string.
于 2013-03-22T11:48:38.937 に答える