I am trying to match the word ethane (preceded with nothing) while avoiding methane. I've tried this in an online regex tester: /(?<!m)ethane/i
(which works), but I get an invalid regex expression error in JavaScript. What am I doing wrong?
Asked
Active
Viewed 63 times
0

Jake Smith
- 2,332
- 1
- 30
- 68
-
If you're using https://regex101.com/, make sure you select javascript, in flavor, instead of php. This might help: https://stackoverflow.com/questions/641407/javascript-negative-lookbehind-equivalent – Darrennchan8 Jun 05 '17 at 02:58
-
1JavaScript doesn't currently support look-behind patterns. Though, there's [an active proposal](https://github.com/tc39/proposal-regexp-lookbehind) for adding them (at the moment, the proposal is a "Candidate," [stage 3](https://github.com/tc39/proposals#active-proposals)). – Jonathan Lonowski Jun 05 '17 at 02:58
-
Neat, good to know. So if I'm using JavaScript, how would I match on "ethane" and not "methane"? – Jake Smith Jun 05 '17 at 03:00
-
You can try to use the "starts with" anchor. /^ethane/i . But this will force the string to start with 'ethane' (so for example it would match 'ethane', but not 'methane', and not 'word ethane') – syazdani Jun 05 '17 at 03:02
-
Do you want to match "ethane" as a separate word, or just those letters as long as they don't follow an "m"? Are "polyurethane" and/or "ethanediol" supposed to match? – nnnnnn Jun 05 '17 at 03:08
-
I want to match "Ethane", "ethane", " ethane", " ethane ", "ethane " (case-insensitive. I don't anticipate anything coming before "ethane" besides potentially some whitespace (tabula/ocr reasons). But methane usually shows up before ethane in the table I'm parsing. I've collected the methane row of the table, now I want to match on the ethane row of the table. Hope that helps! I really appreciate your help! – Jake Smith Jun 05 '17 at 03:18
-
1When testing your regexps in a regexp tester, make sure to select the "JavaScript" flavor. – Jun 05 '17 at 03:19
1 Answers
2
You can use RegExp
/\bethane\b/
to match "ethane"
and not "methane"
var thanes = ["ethane", "methane"];
var re = /\bethane\b/;
thanes.forEach(word => console.log(re.test(word)));
See

guest271314
- 1
- 15
- 104
- 177