正規表現-行がキーワードで始まる二重引用符で囲まれた文字列を抽出します

2
2022.01.14

次の行を指定します。

classes!("text-xl", "text-blue-500")
String::from("test")
classes!("text-sm")

、、text-blue-500、およびclasses!内の他の文字列を抽出したい

私がこれまでに持っているのは次のとおりです。

  • (?<=classes!).* - これは私にクラスの後にすべてを与えます!しかし、正確な値ではありません
  • (?!^")".*?" - これは私に私が望む値を与えるが、引用符で
  • グローバル・ライン・フラグとマルチライン・フラグを使用します。
回答
3
2022.01.14

Javascript を使用していて、肯定的な後読みをサポートしている場合 (複数行フラグは必要なく、グローバル フラグのみ)

(?<=classes!\((?:"[^"]*",\s*)*")[^"]*(?=")
  • (?<= 左に断定する肯定的な後ろ
    • classes!\( マッチ classes!(
    • (?:"[^"]*",\s*)*"...",のオプションの繰り返しに一致する
    • " 二重引用符と一致する
  • ) 後ろを見る
  • [^"]*"以外のオプションの文字と一致
  • (?=") 右に " をアサートする

正規表現デモ

const regex = /(?<=classes!\((?:"[^"]*",\s*)*")[^"]*(?=")/g;
const str = `classes!("text-xl", "text-blue-500")
String::from("test")
classes!("text-sm")
`;
console.log(str.match(regex))

2
2022.01.14

あなたはそうのように、非固定幅の後ろを見てみることができる:

(?<=^classes!\("(?:[^"]*"[^"()]*")*)[^"]*

オンラインデモを見る


  • (?<= - 後ろに肯定的なルックを開きます。
    • ^classes!\(" - スタートラインアンカーとマッチ文字通り 'クラス!("';
    • (?:[^"]*"[^()"]*")* - ネストされた非キャプチャグループで、引用符(およびパランテシス)以外の任意のchar、引用符、および同じシーケンスを繰り返し一致させる(0回以上)。
    • ) - 後ろを見て見る;
  • [^"]* - 引用符以外の 0+ (欲張り) 文字と一致します。