在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之后它总是返回错误的索引值。
另外一个快速的问题是,有没有比使用''存储字符串更好的方式,比如“内部?所以如果我有其他'字符等,它不会导致问题。
编辑 -
这是我创建的函数(用法= 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%而不是。
答案 0 :(得分:1)
首先,第一个引号的索引是11,MyString.indexOf('"')
和MyString.indexOf('"',1)
都返回正确的值(后者也有效,因为你的字符串开头实际上没有引号)。
当您需要在另一个内部使用单引号或在另一个内部使用双引号时,您需要使用反斜杠转义内部引号。因此,要抓住单引号,您可以使用'\''
有几种方法可以从字符串中删除值。您可以使用 RegExp 类或使用标准字符串等函数,例如indexOf
,substr
等。
现在你想要的结果是什么?你的问题不明显。
修改强>
使用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 - &gt;文本对齐:中心;行高:150%
索引1 - &gt; http://www.website.com/page.htm
索引2 - &gt;
索引-1 - &gt;