(Это очень похоже на мой последний вопрос, но я просто понял, что пытался решить неправильную проблему)Как разбить эту строку на запятую, но только если она соответствует этим критериям?
Я создаю что-то вроде jQuery, и я пытаюсь разобрать селектор. Таким образом, учитывая что-то вроде этого:
a[href="http://weird.url/has,commas"], strong
Как я могу разделить это на
a[href="http://weird.url/has,commas"]
strong
?
Его необходимо разбить на запятую, но только если он не в кавычках или в атрибуте.
Модифицированная версия решения Макса:
static IEnumerable<string> SplitSelectors(string str)
{
int openBrackets = 0;
int lastIndex = 0;
for (int i = 0; i < str.Length; ++i)
{
switch (str[i])
{
case '[':
openBrackets++;
break;
case ']':
openBrackets--;
break;
case ',':
if (openBrackets == 0)
{
yield return str.Substring(lastIndex, i - lastIndex);
lastIndex = i + 1;
}
break;
}
}
yield return str.Substring(lastIndex);
}
я игнорирую кавычки, потому что я не думаю, что они должны происходить вне селектора атрибутов в любом случае. Я пытаюсь подражать спецификациям jQuery, но я не совсем уверен, что они в этом сценарии.
Поскольку вы говорите о разборе, возможно, вам будет проще смотреть на другие пути, которые делают эту работу за вас? http://htmlagilitypack.codeplex.com/ и http://jint.codeplex.com/ – t0mm13b
@ tommieb75: Я уже использую 'HtmlAgilityPack' в этом проекте. Это не Html, который я пытаюсь разобрать на данный момент, просто Html-селекторов. – mpen
ahhh! справедливо! – t0mm13b