2016-11-10 3 views

答えて

2

ちょうど "IES" の前に文字をキャプチャ:

'entities '.replace(/(\w)(ies)(?:[\W|$|_])+/g, '$1y'); 

今すぐ機能を使用する方法について尋ねた質問。あなたもそれを行うことができます:

'entities '.replace(/(\w)(ies)(?:[\W|$|_])+/g, function(_, before, repl) { 
    return before + "y"; 
}); 

"ies"の後の後続のもので何をしたいのか分かりません。それをキャプチャして置換えに戻すか、正の先読みを使用することができます。先読みによって照合された入力テキストの部分は、置換操作に関連する一致の一部ではありません。言い換えると、先読みはパターンに基づいて成功または失敗するが、一致した文字は「置き換えられる」グループには含まれない。

+0

? – Gavin

+0

'[\ W | $ | _]'はどうですか? –

+0

@ギャビン?彼はそれを失いたくないからです。 '.replace()'関数は、マッチ全体を置換することを期待しています。 – Pointy

3

\w\Bに変更して、単語の境界がないことを確認できます。でも、前の文字をキャプチャわざわざなぜ

console.log('entities '.replace(/\Bies\b/g, 'y'));

+0

エンティティを返すには、どのように '' entities '。replace(/ \ B(ies)(?:[\ W | $ | _])+/g、' y ') 'を取得できますか?末尾スペースの損失に注意してください。 – Ben

+0

@BenAston正規表現で正確に何をしたいですか?末尾のスペースを削除するには 'trim()'を呼び出すことができます。 'ies'が最後にある場合には' – 4castle

+0

'entities'.replace(/ \ B(ies)(?:[\ W | $ | _])+/g、 'y')'は動作しません文字列どうして? (私は '$'がこのケースをカバーすると思いました)あなたの改訂された答えは素晴らしいです。 – Ben

関連する問題