Получить indexOf специальных символов в ActionScript3 - PullRequest
0 голосов
/ 27 февраля 2012

В ActionScript3 я хотел получить текст между двумя кавычками из некоторого HTML, используя значение входного индекса, где я просто увеличил бы значение символов 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 он всегда возвращает неправильное значение индекса.

Также еще один быстрый вопрос: есть ли лучший способ, чем использовать '' для хранения строк с такими символами, как "внутри? Так что, если у меня есть другие" символы и т. Д., Это не вызовет проблем.

Редактировать -

Это функция, которую я создал (использование = 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): «выравнивание текста, но мне нужно выравнивание текста: по центру; высота строки: 150%.

1 Ответ

1 голос
/ 27 февраля 2012

Прежде всего, индекс первой кавычки равен 11, и оба значения MyString.indexOf('"') и MyString.indexOf('"',1) возвращают правильное значение (последнее также работает, потому что у вас фактически нет кавычки в начале вашей строки).

Когда вам нужно использовать одинарную кавычку внутри другой или двойную кавычку внутри другой, вам нужно экранировать внутреннюю (ие) с помощью обратной косой черты. Таким образом, чтобы поймать одну цитату, вы должны использовать ее как '\''

Есть несколько способов извлечь значение из строки. Вы можете использовать класс RegExp или использовать стандартные функции String , такие как indexOf, substr и т. Д.

Теперь, каким именно вы хотели бы получить результат? Ваш вопрос не очевиден.

EDIT:

Использование класса 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 -> выравнивание текста: по центру; высота строки: 150%
Индекс 1 -> http://www.website.com/page.htm
Индекс 2 ->
Индекс -1 ->

...