Вы можете попробовать что-то вроде этого:
let test = true;
$('#css_toggle').click(function() {
if(test) {
$('link.sty').attr("href","style.css");
test = false;
} else {
$('link.sty').attr("href","style1.css");
test = true;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link class="sty" href="style.css" rel="stylesheet">
<button id="css_toggle" title="I'm a tooltip!">Text</button>
<div class="sq"></div>
Попробуйте это:
String source = "Alpha,Beta,Gama,\"23-5-2013,TOM\",TOTO,\"Julie, KameL\n"
+ "Titi\",God,\" timmy, tomy,tony,\n"
+ "tini\".";
Pattern p = Pattern.compile("(([^\"][^,]*)|\"([^\"]*)\"),?");
Matcher m = p.matcher(source);
while(m.find())
{
if(m.group(2) != null)
System.out.println( m.group(2).replace("\n", "") );
else if(m.group(3) != null)
System.out.println( m.group(3).replace("\n", "") );
}
Если он соответствует строке без кавычек, результат возвращается в группе 2. Строки с кавычками возвращаются в группе 3. Следовательно, мне нужно было провести различие в while- блок. Вы можете найти более красивый способ.
Выход: Alpha Beta Gama 23-5-2013, TOM TOTO Julie, KameLTiti God timmy, tomy, tony, tini.
Анализ CSV намного сложнее, чем можно было бы представить с первого взгляда, поэтому ваш лучший вариант - использовать хорошо разработанную и протестированную библиотеку для выполнения этой работы для вас. Две библиотеки: opencsv и supercsv и многие другие. Посмотрите на оба и используйте тот, который наилучшим образом соответствует вашим требованиям и стилю.
См. этот связанный ответ для достойного Java-совместимого регулярного выражения для синтаксического анализа CSV.
Он распознает:
""this""
Короче говоря, вы будете использовать этот шаблон: (?:,|\n|^)("(?:(?:"")*[^"]*)*"|[^",\n]*|(?:\n|$))
Затем собирайте каждый Matcher group(1)
в цикле find()
.
Примечание. Хотя я опубликовал этот ответ здесь о «приличном» регулярном выражении, которое я обнаружил, просто чтобы спасти людей, ищущих один, это ни в коем случае не является надежным. Я до сих пор соглашаюсь с этим ответом пользователем «fgv»: предпочтительным является CSV Parser.
Рассмотрим следующий пример универсального регулярного выражения , проверенный на Java-парсере , который не требует дополнительной обработки для повторной сборки частей данных. Первая соответствующая группа будет соответствовать котировке, а затем переносит это до конца матча, чтобы вы были уверены, что захватили все значение между, но не включая кавычки. Я также не записываю запятые, если они не были встроены подстрокой с разделителями с разделителями.
(?:^|,\s{0,})(["]?)\s{0,}((?:.|\n|\r)*?)\1(?=[,]\s{0,}|$)
$Matches = @()
$String = 'Alpha,Beta,Gama,"23-5-2013,TOM",TOTO,"Julie, KameL\n
Titi",God,"timmy, \n
tomy,tony,tini"'
$Regex = '(?:^|,\s{0,})(["]?)\s{0,}((?:.|\n|\r)*?)\1(?=[,]\s{0,}|$)'
Write-Host start with
write-host $String
Write-Host
Write-Host found
([regex]"(?i)(?m)$Regex").matches($String) | foreach {
write-host "key at $($_.Groups[1].Index) = '$($_.Groups[1].Value)'`t= value at $($_.Groups[2].Index) = '$($_.Groups[2].Value)'"
} # next match
start with
Alpha,Beta,Gama,"23-5-2013,TOM",TOTO,"Julie, KameL\n
Titi",God,"timmy, \n
tomy,tony,tini"
found
key at 0 = '' = value at 0 = 'Alpha'
key at 6 = '' = value at 6 = 'Beta'
key at 11 = '' = value at 11 = 'Gama'
key at 16 = '"' = value at 17 = '23-5-2013,TOM'
key at 32 = '' = value at 32 = 'TOTO'
key at 37 = '"' = value at 38 = 'Julie, KameL\n
Titi'
key at 60 = '' = value at 60 = 'God'
key at 64 = '"' = value at 65 = 'timmy, \n
tomy,tony,tini'
[/g5]
(?:
start non capture group ^
требует начала строки |
или ,\s{0,}
запятая, за которой следует любое количество пробелов )
, закрывает группу не захвата (
группа начала записи 1 ["]?
потребляет цитату, если она существует, мне нравится делать это таким образом, чтобы вы хотели включить другие символы, а затем цитату )
закрыть группу захвата 1 \s{0,}
потребляют любые пробелы, если они существуют, это означает, что вам не нужно обрезать значение позже (
начало группы захвата 2 (?:.|\n|\r)*?
захватить все символы, включая новую line, non greedy )
закрыть группу захвата 2 \1
, если бы была цитата, она была сохранена в группе 1, поэтому, если бы это было тогда, (?=
начать нулевое утверждение вперед [,]\s{0,}
должно иметь запятую, а затем необязательные пробелы $
конец строки )
закрывает нулевое утверждение вперед