简体   繁体   中英

regular expression in string.replace with a callback function

 function helpLinkConvert(str, p1, offset, s)  {  
      return "<a href=\"look.php?word="
               +encodeURIComponent(p1)+"\">"+p1+"</a>";
     }

var message = "(look: this) is a (look: stackoverflow) question";
message = message .replace(/\(look: (.{1,80})\)/, helpLinkConvert);

This is what I want to do,

Before:

(look: this) is a (look: stackoverflow) question.

After:

this is a stackoverflow question


When there is only one matched string, it's working but in other cases It's not working properly,

How can I do that? Thanks.

You need to add the global g modifier , and a non-greedy match so the regular expression finds all matches:

/\\(look: (.{1,80}?)\\)/g

In your code:

function helpLinkConvert(str, p1, offset, s) {  
    return "<a href=\"look.php?word="+encodeURIComponent(p1)+"\">"+p1+"</a>";
}

var message = "(look: this) is a (look: stackoverflow) question";
message = message.replace(/\(look: (.{1,80}?)\)/g, helpLinkConvert);

Outputs:

"<a href="look.php?word=this">this</a> is a <a href="look.php?word=stackoverflow">stackoverflow</a> question"

Use the g flag:

message .replace(/\(look: (.{1,80})\)/g, helpLinkConvert);

The g (stands for "global") will match against all occurrences of the pattern on this string, instead of just the first one.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM