0

次の正規表現があります:

^(?:(?!<(\w+)(\s+(\w+)\s*\=\s*(\'|")(.*?)\\4\s*)*\s*>).)*$

そして、ユーザーがJavaScriptコードを入力できるテキストボックスがあるので、正規表現は次のように一致する必要があります:

if ( i < html > 0 ) || ( j > 10 )

それは機能しますが、単一行でのみ機能しますが、複数行で機能する必要があります

ところで。このページで正規表現をテストします: http://www.zytrax.com/tech/web/regex.htm#experiment

4

3 に答える 3

1

複数行の入力で失敗する理由は.、デフォルトではドット ( ) が改行文字と一致しないためです。正規表現の前に追加してシングルラインモードにすることで修正できます(ドットが改行を含む(?s)すべてに一致するようになるため、一部のフレーバーではDOTALLモードとも呼ばれます)。

他のレスポンダーが言及した複数行モードは、おそらくあなたのケースには関係ありません。これが行うことは、^および$アンカーが個々の行の先頭と末尾、および文字列全体の先頭と末尾に一致できるようにすることです。

あなたはこれを ASP.NET RegularExpressionValidator で使用していると言いましたが、これは別の潜在的な問題を引き起こします。バリデーターがサーバーだけでなくクライアント側でも検証を行うように設定されている場合、.NET ではなく、JavaScript 正規表現フレーバーが機能します。JavaScript は Singleline/DOTALL モードをサポートしていないため、正規表現のドットをすべての文字に一致する別のものに置き換える必要があります。ほとんどの人が使用します([\s\S]空白文字または空白文字以外の任意の文字)。

引用された属性値のより堅牢なイディオムを含む結果の正規表現を次に示します。

^(?:(?!<\w+(?:\s+\w+\s*\=\s*(['"])(?:(?!\1).)*\1)*\s*>)[\s\S])*$
于 2012-05-02T02:47:18.147 に答える
0

JavaScript の場合は、正規表現で複数行修飾子 m を使用します。

ここで動作することをテストできます: http://regexpal.com/

于 2012-05-01T11:56:01.073 に答える
0

すべての正規表現エンジンには、複数行に一致するオプションがあります。あなたの質問はあなたが使用しているエンジンについて言及していないので、それ以上にあなたを助けるのは簡単ではありません.

于 2012-05-01T11:57:43.343 に答える