0

大きなリストから特定の番号を抽出したいドキュメントがあります。

ここにコード全体をリストすることはできません。簡単にするために、コードは必要ないため、例を示します。

たとえば、次のようなリストがあるとします。

1: text,
2: more text,
3: etc

部分文字列を使用して、文字列の最初の文字のみをキャプチャするのは簡単です。これは、私が求めている数字になります。しかし、それが 10 または 100 になるとどうなるでしょうか。リストの形式や内容をまったく変更できないことに注意してください。リスト内の値のみを受け取ることができます。

文字列なしで数字だけを取得する方法はありますか?

4

7 に答える 7

3

正規表現を使用します。

何かのようなもの

var matches = "121: test".match(/^(\d*):\s/)
var val;

if (matches && matches.length > 0) val = matches[1]

この正規表現には、必要な場合と必要でない場合があるものがたくさんあります

^ 行の先頭を
() 意味しますこのグループをキャプチャすることを
\d* 意味します行で見つけた数字と同じ数の数字を意味しますあなたの例で
:持っているコロンはあなたの例
\sでコロンの後の単一の空白文字です

(\d*) を定義しているため、match メソッドは一致のその部分 (数字) をキャプチャし、配列で使用できるようにします。

于 2012-11-13T13:33:22.510 に答える
2

indexof( ":");まで部分文字列を実行できます。サンプルコード:

var str="100: Hello world!";
document.write(str.substring(0, str.indexOf(":")));

結果として100を取得します。お役に立てれば!幸運を、

于 2012-11-13T13:35:18.383 に答える
2

正規表現を使用できます。

var s = "1: text,\n"+
"2: more text,\n"+
"3: etc\n​​"​;

var matches = s.match( /\d+/ig);

for(var i=0;i<matches.length;++i){
   console.log(matches[i]);           
}​​​​​​​​​​

ここで動作することを確認してください。

于 2012-11-13T13:44:52.713 に答える
1

試す

// limit split to 1 to avoid unnecessary splits
var num = "1000: rest of string".split(":", 1)[0];

私はjsPerfでここに与えられた方法でいくつかのテストを実行し、結果はここに

必要な数を取得する最速の方法は、

"1000: rest of string".substring(0, str.indexOf(":"));

速度が重要な場合、正しい答えはユーザーコーダーに送られるべきです。

于 2012-11-13T13:39:29.413 に答える
1

これに正規表現を使用しないのはなぜですか?

'100: asds'.replace(/^(\d+):.+$/, '$1'); // 100
于 2012-11-13T13:33:28.737 に答える
1

「:」の位置を取得してから、 string.substring(0, position) を実行できます

var str="1000: this is a string";
var number = str.substring(0,str.search(':')); // 1000
于 2012-11-13T13:34:04.143 に答える
0

正規表現の方が適しているかもしれませんが、上で提案されている解決策を使用する必要がある場合は、次のようにして「{」を取り除くことができます。

if(str.contains("{"))
{
     str.replace("{", "");
}
于 2012-11-14T06:45:36.423 に答える