我正在尝试创建一个与一定长度的单词中的一组字符匹配的正则表达式。
包含hello goodbye low loving
单词长度为5或更大
匹配字符l [它将匹配l l l
(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, "£");
答案 0 :(得分: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);
我正在使用前瞻,以便不会为每个单个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
答案 1 :(得分: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