1

文字列があるとします: BLAH BLAH BLAH copy 2. 「copy」という単語と、copy という単語に続く可能性のある数字の 2 つの部分のインデックスを見つけたいと思います。

/(copy)\s+([0-9]+)$/i上記の文字列の copy と 2 に正常に一致する regex:があります。数字の 2 のインデックスを見つけるにはどうすればよいですか? 一致したテスト 'copy 2' の位置を見つけるために .index を使用できることはわかっていますが、インクリメントできるように '2' の位置を取得したいと考えています。

4

4 に答える 4

1

正規表現を少し変更すると、数値のインデックスを計算できます。

var matches = "BLAH BLAH BLAH copy 2".match(/(copy)(\s+)([0-9]+)$/i);
var numberIndex = matches.index + matches[1].length + matches[2].length;

しかし、実際には、数を増やすためにそれは必要ありません。

var matches = "BLAH BLAH BLAH copy 2".match(/(copy)\s+([0-9]+)$/i);
var incremented = (+matches[2]) + 1;
于 2012-07-19T20:08:46.853 に答える
1

コピー数を増分数に置き換える必要がある場合は、replaceプラス置換機能を使用してください。

'BLAH BLAH BLAH copy 2'.replace(/(copy )(\d+)/, function (s, s1, s2) {
    return s1 + (Number(s2) + 1);
});
于 2012-07-19T20:11:02.607 に答える
1

正規表現を使用する必要が/^(.*?copy\s+)(\d+)$/iあり、$1 の長さは $2 (コピー数) の位置です。

編集:あなたのテストコードは(フィドル)です:

var str = "BLAH BLAH BLAH copy 2";
var m = str.match(/^(.*?copy\s+)(\d+)$/i);
alert("Found '" + m[2] + "' at position " + m[1].length);
于 2012-07-19T20:04:51.597 に答える
0

正規表現を次のように変更/(copy)\s+([0-9]+)$/iします/^((.*)(copy)\s+)([0-9]+)$/i

の位置copyは の長さで$2、数字の位置は の長さです$1。番号が入ります$4

于 2012-07-19T20:21:57.697 に答える