Bogey
Bogey

Reputation: 5764

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!

Upvotes: 6

Views: 9562

Answers (3)

mohamed-ibrahim
mohamed-ibrahim

Reputation: 11137

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'))

Upvotes: 9

Daniel Lizik
Daniel Lizik

Reputation: 3144

This also works

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

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

Upvotes: 1

user2526920
user2526920

Reputation:

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

Upvotes: 2

Related Questions