以下は 'entiy'を返します。私はそれが「エンティティ」を返すようにしたい。どうすればこれを達成できますか?string.prototype.replaceを正規表現と関数で使用する
'entities '.replace(/\w(ies)(?:[\W|$|_])+/g, 'y');
以下は 'entiy'を返します。私はそれが「エンティティ」を返すようにしたい。どうすればこれを達成できますか?string.prototype.replaceを正規表現と関数で使用する
'entities '.replace(/\w(ies)(?:[\W|$|_])+/g, 'y');
ちょうど "IES" の前に文字をキャプチャ:
'entities '.replace(/(\w)(ies)(?:[\W|$|_])+/g, '$1y');
今すぐ機能を使用する方法について尋ねた質問。あなたもそれを行うことができます:
'entities '.replace(/(\w)(ies)(?:[\W|$|_])+/g, function(_, before, repl) {
return before + "y";
});
"ies"の後の後続のもので何をしたいのか分かりません。それをキャプチャして置換えに戻すか、正の先読みを使用することができます。先読みによって照合された入力テキストの部分は、置換操作に関連する一致の一部ではありません。言い換えると、先読みはパターンに基づいて成功または失敗するが、一致した文字は「置き換えられる」グループには含まれない。
\w
を\B
に変更して、単語の境界がないことを確認できます。でも、前の文字をキャプチャわざわざなぜ
console.log('entities '.replace(/\Bies\b/g, 'y'));
エンティティを返すには、どのように '' entities '。replace(/ \ B(ies)(?:[\ W | $ | _])+/g、' y ') 'を取得できますか?末尾スペースの損失に注意してください。 – Ben
@BenAston正規表現で正確に何をしたいですか?末尾のスペースを削除するには 'trim()'を呼び出すことができます。 'ies'が最後にある場合には' – 4castle
'entities'.replace(/ \ B(ies)(?:[\ W | $ | _])+/g、 'y')'は動作しません文字列どうして? (私は '$'がこのケースをカバーすると思いました)あなたの改訂された答えは素晴らしいです。 – Ben
? – Gavin
'[\ W | $ | _]'はどうですか? –
@ギャビン?彼はそれを失いたくないからです。 '.replace()'関数は、マッチ全体を置換することを期待しています。 – Pointy