0

我正在尝试创建一个匹配特定长度单词中的一组字符的正则表达式。

AKA 与列表hello goodbye low loving

字长为 5 或更大 匹配 l 的字符 [它将匹配l l l(the 中的两个hello和 中的一个loving)]。

我需要这个来替换用例。

因此将字母替换为£输出

he££o goodbye low £oving

我指的是这个问题,regular-expression-match-a-word-of-certain-length-which-starts-with-certain-let,但我不知道如何从整个单词中更改匹配符号到单词中的一个字符。

我有,但我需要将字长检查添加到匹配的正则表达式中。

myText = myText.replace(/l/g, "£");
4

2 回答 2

4

您可以使用这样的匿名函数:

var str = 'hello goodbye low loving';
var res = str.replace(/\b(?=\S*l)\S{5,}/g, function(m) {
    return m.replace(/l/g, "£");
});
alert(res);

jsfiddle

我使用前瞻只是为了不为每个 5 个(或更多)字母单词调用匿名函数。

编辑:快一点的正则表达式是:\b(?=[^\sl]*l)\S{5,}

如果 JS 曾经支持所有格量​​词,这将更快:\b(?=[^\sl]*+l)\S{5,}


正则表达式的解释

\b         // matches a word boundary; prevents checks in the middle of words
(?=        // opening of positive lookahead
   [^\sl]* // matches all characters except `l` or spaces/newlines/tabs/etc
   l       // matches a single l; if matched, word contains at least 1 `l`
)          // closing of positive lookahead
\S{5,}     // retrieves word on which to run the replace
于 2013-10-08T09:32:37.777 回答
0

这应该有效:

var s='hello goodbye low loving';
r = s.replace(/\S{5,}/g, function(r) { return r.replace(/l/g, '£'); } );
// he££o goodbye low £oving
于 2013-10-08T09:30:03.087 回答