Given the following lines:
classes!("text-xl", "text-blue-500")
String::from("test")
classes!("text-sm")
I wish to extract text-xl, text-blue-500 and text-sm and potentially any other strings within classes!
What I have so far is:
(?<=classes!).*– this gives me everything after classes! but not
the exact values(?!^")".*?"– this gives me the values I want with but with the quotes- I use the global and multi line flags
>Solution :
If you are using Javascript, and the positive lookbehind is supported (you don’t need the multiline flag, only the global flag)
(?<=classes!\((?:"[^"]*",\s*)*")[^"]*(?=")
(?<=Positive lookbehind to assert to the leftclasses!\(Matchclasses!((?:"[^"]*",\s*)*Match optional repetitions of"...","Match a double quote
)Close lookbehind[^"]*Match optional chars other than"(?=")Assert"to the right
const regex = /(?<=classes!\((?:"[^"]*",\s*)*")[^"]*(?=")/g;
const str = `classes!("text-xl", "text-blue-500")
String::from("test")
classes!("text-sm")
`;
console.log(str.match(regex))