Waseem Akhtar
Waseem Akhtar

Reputation: 183

Javascript RegEx positive lookahead not working as expected

First of all i am not very good in dealing with regex But I am trying to create a regex to match specific string while replace it by skipping first character of matcher string using positive look ahead. Please see detail below

Test String asdf.wakawaka asdf.waka df.waka [df.waka (df.waka _df.waka {df,waka

RegEx (?=[^\w])df\.

Replacement String kkk.

Expected Result asdf.wakawaka asdf.waka kkk.waka [kkk.waka (kkk.waka _df.waka {df,waka

But regex above dos not found any match thus it replaces nothing as a result and give original test string in the result.

Without positive lookahead (skip first character strategy) it matches my requirement. see matching regex sample on regex101.com

With positive lookahead giving unexpected results regex with positive look aheah on regex101.com

Thanks in advance for any help.

Upvotes: 1

Views: 747

Answers (1)

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 626927

Using [^\w] means you want to match and consume a char other than a word char before the match you need to replace.

However, this char is consumed and you cannot restore it without capturing it first. You might use Gurman's approach to match /(^|\W)df\./g and replace with '$1kkk., but you may also use a word boundary:

\bdf\.

See the regex demo

JS demo:

var s = "asdf.wakawaka asdf.waka df.waka [df.waka (df.waka _df.waka {df,waka";
console.log(
  s.replace(/\bdf\./g, 'kkk.')
);

However, if you do not want to replace df. at the start of the string, use

var s = "df. asdf.wakawaka asdf.waka df.waka [df.waka (df.waka _df.waka {df,waka";
console.log(
  s.replace(/(\W)df\./g, '$1kkk.')
);

Upvotes: 1

Related Questions