0

以下の表現を使いました

str.match(tag+"(\s*=\s*)((['"]*)(.+?)(['"]*)\1)");

str は照合する文字列、tag は変数です。

たとえば、上記の式は一致する必要があります

m="img"
m='img'

タグ= m;
しかし、上記の行で私は得ています

SyntaxError:予期しないトークン ]

4

2 に答える 2

2

正規表現の末尾から /1 を削除すると、m="img" で機能します。

m(\s*=\s*)((['\"]*)(.*)(['\"]*))

"\1" は、パターン内の最初のサブパターンの値に置き換えられるため、m="img";m='img' に一致させたい場合は、次を使用する必要があります。

(m\s*=\s*)((['\"]*)(.*)(['\"]*)\1)

ここで、m はタグ変数です。

編集:ここで
JavaScript 正規表現をテストできます。

于 2012-04-09T06:35:03.000 に答える
1
  • 前述のとおり、引用符はエスケープする必要があります。
  • 後方参照もエスケープする必要があります。
  • 後方参照を使用すると、引用符付きの 2 番目のグループは不要になります。
  • これは、引用符を含む 3 番目の括弧グループであるため、\1 ではなく \3 が必要です。
  • そして、次のような引用符の量に一致する必要はほとんどありません。m = '''img'''

これらすべての点を考慮に入れると、次の解決策が得られる可能性があります。

var tag = 'm';
"m='img'".match(tag+"(\s*=\s*)((['\"]?)(.+?)\\3)")
// ["m='img'", "=", "'img'", "'", "img"]
于 2012-04-09T06:32:51.050 に答える