1

私はこのようなテキストを持っています。

Mr John Smith , Mr James Smith                  +(21)-(21)-12345678, 12345678, 12345678                     +(21)-12345678, 12345678, 12345678        SomeTextHereAlso        +(21)-(22)-12345678                       www.somewebaddress.co.uk                            Some Title, Some Place , Some Town,Some Suburb,  City - 100000

javascriptの正規表現を使用してこれらの各文字列を抽出したいと思います。私はいくつかの例を見つけました、そして今朝それらは働きました。なぜそれらが機能しなくなったのかわかりません。

抽出するには

Mr John Smith , Mr James Smith

これを使用しました。

/\S(.*)\+/  and /\S(.*?)\+/

これはうまくいきませんでした。理由がわかりません。

これを抽出するには

+(21)-(21)-12345678, 12345678, 12345678                     +(21)-12345678, 12345678, 12345678        SomeTextHereAlso        +(21)-(22)-12345678     

これを使用しました。

/\+(.*)(?=www.)/

これはうまくいきました。

そして私が使用したURLには

/www(.*?)(?=\s\s)/

そして、これも機能します。

唯一の問題は、最初の+まですべての文字を抽出する必要がある最初の例ですが、最後の+まですべての文字を抽出します。

http://gskinner.com/RegExr/?2tr5tを確認しましたが、ここで示した例は機能します。コードを調べてもエラーが見つからなかったので、役立つ類似の例は他にありますか。

正規表現に問題がない場合、この例でIndexOf()メソッドを使用して、必要なものを抽出するにはどうすればよいですか?

4

3 に答える 3

1

私はこのソリューションを使用して、問題を解決するのに役立ちました。したがって、私のプロジェクトはRegExとIndexOf()メソッドの組み合わせになります。

この問題でRegExが失敗した理由はわかりません。皆さん、ありがとうございました。

于 2012-06-19T00:45:21.363 に答える
0

あなたは試すことができます[^+]+またはより具体的に^[^+]+

于 2012-06-18T16:27:03.907 に答える
0

最初の例では、否定された文字クラスを使用して、内部ループが「+」文字と一致することを禁止できます。

/\S([^+]*)\+/

一致を抽出することに関しては、一般的なパターンは次のようなことをしています

var myPattern = /someregex/g;
var match;
while( (match=myPattern.exec(theString)) !== null ){
    console.log('the total match', match[0]);
    console.log('the first grouped parenthesis', match[1]);
    //and so on
}

たとえば、実行中

var regex = /a(\d+)/g;
var str = ' a100 b200 a300';
var match;
while( (match=regex.exec(str)) !== null ){
    console.log(match)
}

プリント

["a100", "100"]
["a300", "300"]

さらに疑問がある場合は、MDNに関するドキュメントを強くお勧めします。

于 2012-06-18T16:04:59.930 に答える