0

正規表現:

/@([\S]*?(?=\s)(?!\. ))/g

与えられた文字列:

'this string has @var.thing.me two strings to be @var. replaced'.replace(/@([\S]*?(?=\s)(?!\. ))/g,function(){return '7';})

期待される結果:

'this string has 7 two strings to be 7. replaced'

「より良く」したい場合は、Razor Htmlエンコード式を一致させようとしていますが、終了ピリオドとそれに続くスペースを一致させない場合に注意してください。上記のテストケースは、2番目の(短い)@varでそれを示していますが、最初のテストケースは次のようにキャプチャします@var.thing.me

4

3 に答える 3

2

次の正規表現を試してください。

var input = 'this string has @var.thing.me two strings to be @var. replaced';
input.replace(/(@[a-z][a-z.]+[a-z])/gi, function(){
  return '7';
});

この正規表現は、次に文字(後にドットがない場合)、最後に文字またはドットと文字に(@[a-z]([a-z.]+[a-z])*)一致します。@@

imodificatorを使用すると、正規表現で大文字と小文字が区別されなくなります。

于 2013-01-18T08:33:06.583 に答える
1

パターンは十分に制限されていません。つまり、キャプチャが多すぎます。サンプル文字列の最後@var.(ドットを含む)は、スペース(正の先読みで必要とされる)が続き、さらにドットとスペース(負の先読みで必要とされる)が続かないためにキャプチャされます。 。このパターンを試すことができます:

/@([\S]*?)(?=[.]?\s)/g

@somethingサブストリング(ドット文字を含めることができます)の後にスペースが続く場合(文字列の最初の一致で発生する場合)と、ドットとスペースが続く場合(2番目の一致で発生する場合)の両方で一致します文字列の一致)。クロムブラウザコンソールでテストすると、正常に動作するようです。

> 'this string has @var.thing.me two strings to be @var. replaced'.replace(/@([\S]*?)(?=[.]?\s)/g,function(){return '7';})
"this string has 7 two strings to be 7. replaced"
于 2013-01-18T09:32:40.923 に答える
0

これを試して

@((?!\. )\S)+

ここregexrでそれを参照してください

@これは、後に空白以外の文字が続くものと一致し\Sます。ただし、ドットの後にスペースが続かない場合は、次の非空白にのみ一致します。これは、の前の負の先読みアサーション によって保証されます。(?!\. )\S

于 2013-01-18T09:03:33.557 に答える