0

ActionScript3 では、入力インデックス値を使用して HTML から 2 つの引用符の間のテキストを取得したいと考えていました。この場合、2 番目の引用符文字の値を 1 増やすだけです。これは非常に簡単ですが、indexOf の使用が正しく機能していないようです。引用符やその他の特殊文字で。

私の質問は、次のような HTML スタイルのテキストがあるかどうかです。

var MyText:String = '<div style="text-align:center;line-height:150%"><a href="http://www.website.com/page.htm">'; 

引用符 " またはその他の特殊文字のインデックスを正しく取得するにはどうすればよいですか?

現在、私はこれを試しています:

MyText.indexOf('"',1)

しかし、0 の後は常に間違ったインデックス値を返します。

また、簡単な追加の質問は、' ' を使用して " 内部に " などの文字を含む文字列を格納するよりも良い方法があるのでしょうか? したがって、他の ' 文字などがある場合、問題は発生しません。

編集 -

これは私が作成した関数です (usage = GetQuote(MyText,0) など)

        // GetQuote Function (Gets the content between quotes at a set index value)
        function GetQuote(Input:String, Index:Number):String {
            return String(Input.substr(Input.indexOf('"', Index), Input.indexOf('"', Index + 1)));
        }

GetQuote(MyText,0) の戻り値は "text-align ですが、代わりに text-align:center;line-height:150% が必要です。

4

1 に答える 1

1

まず、最初の引用符のインデックスは 11 で、両方とも正しい値MyString.indexOf('"')MyString.indexOf('"',1)返します (文字列の先頭に実際には引用符がないため、後者も機能します)。

別の引用符内で単一引用符を使用する必要がある場合、または別の引用符内で二重引用符を使用する必要がある場合は、バックスラッシュを使用して内側の引用符をエスケープする必要があります。したがって、単一引用符をキャッチするには、次のように使用します'\''

文字列から値を削除するには、いくつかの方法があります。RegExpクラスを使用するか、などの標準の文字列関数を使用できます。indexOfsubstr

では、具体的にどのような結果を望んでいるのでしょうか。あなたの質問は明らかではありません。

編集:

RegExpクラスを使用する方がはるかに簡単です。

var myText:String = '<div style="text-align:center;line-height:150%"><a href="http://www.website.com/page.htm">';

function getQuote(input:String, index:int=0):String {
// I declared the default index as the first one
    var matches:Array = [];
    // create an array for the matched results
    var rx:RegExp = /"(\\"|[^"])*"/g;
    // create a RegExp rule to catch all grouped chars
    // rule also includes escaped quotes
    input.replace(rx,function(a:*) {
        // if it's "etc." we want etc. only so...
        matches.push(a.substr(1,a.length-2));
    });
    // above method does not replace anything actually.
    // it just cycles in the input value and pushes
    // captured values into the matches array.
    return (index >= matches.length || index < 0) ? '' : matches[index];
}

trace('Index 0 -->',getQuote(myText))
trace('Index 1 -->',getQuote(myText,1))
trace('Index 2 -->',getQuote(myText,2))
trace('Index -1 -->',getQuote(myText,-1))

出力:

インデックス 0 --> text-align:center;line-height:150%
インデックス 1 --> http://www.website.com/page.htm
インデックス 2 -->
インデックス -1 -->

于 2012-02-27T18:30:23.487 に答える