0

特定の長さの単語の一連の文字に一致する正規表現を作成しようとしています。

別名リスト付きhello goodbye low loving

語長が 5 以上 l の一致文字 [一致するl l l( 内の 2helloつと 内の 1 つ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 に答える