регулярное выражение в string.replace с функцией обратного вызова - PullRequest
0 голосов
/ 10 декабря 2011
 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);

Это то, что я хочу сделать,

До:

(смотрите: это) - вопрос (смотрите: stackoverflow).

После:

это это стекопоток вопрос


Когда есть только одна совпадающая строка, она работает, но в других случаях она не работает должным образом,

Как я могу это сделать? Спасибо.

Ответы [ 2 ]

5 голосов
/ 10 декабря 2011

Вам необходимо добавить глобальный модификатор g и не жадное совпадение, чтобы регулярное выражение находило все совпадения:

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

В вашем коде:

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

Выходы:

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

2 голосов
/ 10 декабря 2011

Используйте флаг g:

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

g (расшифровывается как «глобальный») будет соответствовать всем вхождениям шаблона в этой строке вместотолько первый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...