1

次のようなテキストがあります。

これはテストです:rep more text more:rep2別のテキストテキストqweqweqwe。

また

これはテストです:rep:rep2 more text more:rep2:rep別のテキストテキストqweqweqwe。(スペースなし)

:repをTEXT1に、:rep2をTEXT2に置き換える必要があります。

問題:次のようなものを使用して置き換えようとすると:

rgobj = new RegExp(":rep","gi");
txt = txt.replace(rgobj,"TEXT1");

rgobj = new RegExp(":rep2","gi");
txt = txt.replace(rgobj,"TEXT2");

:rep2は:repおよび:rep proccessと似ているため、両方でTEXT1を取得します。

4

2 に答える 2

2

データに常に一貫性がある場合は、の:rep2前に置き換えてください:rep

それ以外の場合は:rep\s、キーワードの後のスペースを検索して、を検索できます。スペースも必ず交換してください。

于 2012-08-09T14:26:51.210 に答える
2

:rep常に単語の境界で終了する必要がある場合は、正規表現で明示的にしてください。

new RegExp(":rep\\b","gi");

(単語の境界が必要ない場合は、「こんにちは、私は:rep24の卵を取得しました」の意味を区別できません-それは、、、:repまたは:rep2:rep24

編集:

一致文字列がユーザーによって提供されるという新しい情報に基づいて、最善の解決策は、一致文字列を長さで並べ替え、その順序で置換を実行することです。このようにして、最も長い文字列が最初に置き換えられ、長い文字列の先頭が、その長い文字列に含まれる短い部分文字列の一致によって部分的に置き換えられるリスクがなくなります。したがって、の:replongeststr:replongに置き換えられ、の前に置き換えられ:repます。

于 2012-08-09T14:30:32.557 に答える