Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JS Regex: Match word in a string between single quotes

I'm trying to figure out a regex which yields any string between single quotes ('), IF that string contains a given word.

For example, assume I have the following text, and I want to match everything between single quotes that contains the word "test":

Some sample text,
'this is test a match' and
'this is not a match' but
'this is a match again because it contains the word test'.
This "is not a test match because its double quotes".
And this is not a test match either because this is not encapsulated in quotes.

The regex would need to return two matches, namely

"this is a test match"
"this is a match again because it contains the word test"

I'm a bit lost here. I tried text.match( /'(.*?)'/); to return everything between single quotes, and then subsequently have a function check for a substring match. But oddly that regex didn't even seem to return all strings within single quotes property.

Would greatly appreciate a pointer.. thanks!

like image 852
Bogey Avatar asked Aug 30 '15 13:08

Bogey


3 Answers

Your regex is correct except you want to match all occurance so use g for global search for all matches:

 text.match(/'(.*?)'/g)

and to match for exact word:

 text.match(/'(.*?test.*?)'/g)

You can allow it to be generic for any word by formulate the Regualr Expression using:

word = 'test'
text.match(RegExp("'(.*?"+word+".*?)'", 'g'))
like image 131
mohamed-ibrahim Avatar answered Nov 03 '22 06:11

mohamed-ibrahim


I just fooled around with your example on RegexPal and figured out following expression: '(.*)test(.*)'

like image 36
javahippie Avatar answered Nov 03 '22 04:11

javahippie


This also works

/\'.*(test).*\'/g

https://regex101.com/r/bD6zF0/1

like image 20
Daniel Lizik Avatar answered Nov 03 '22 05:11

Daniel Lizik