Недавно мне пришлось разбить слово на верблюжьей основе на подслов. Нет разделителей, только верхние символы.
#include <string>
#include <list>
#include <locale> // std::isupper
template<class String>
const std::list<String> split_camel_case_string(const String &s)
{
std::list<String> R;
String w;
for (String::const_iterator i = s.begin(); i < s.end(); ++i) { {
if (std::isupper(*i)) {
if (w.length()) {
R.push_back(w);
w.clear();
}
}
w += *i;
}
if (w.length())
R.push_back(w);
return R;
}
Например, это разделяет «AQueryTrades» на «A», «Query» и «Trades». Функция работает с узкими и широкими строками. Поскольку он уважает текущую локаль, он разбивает «RaumfahrtÜberwachungsVerordnung» на «Raumfahrt», «Überwachungs» и «Verordnung».
Примечание std::upper
должно быть действительно передано как аргумент шаблона функции. Тогда более обобщенная из этой функции может расщепляться на разделителях, таких как ","
, ";"
или " "
.
Вы не можете получить идентификатор вкладки с javascript, как бы там ни было какое-то решение, которое может помочь вам с использованием разных сеансов / файлов cookie, когда пользователь открывает новую вкладку.
Некоторая ссылка:
Получить вкладку браузера Index / Id
получить URL-адреса вкладок firefox из расширения firefox
Как отличаться Получить уникальный сеанс на каждой вкладке браузера
asp.net - сеанс - несколько браузеров вкладки - разные сеансы?
Одним из возможных решений является использование свойства window.name, но я не хочу его использовать, потому что кто-то еще может его использовать.
Я нашел еще одно возможное решение: using sessionStorage. Он поддерживается FF3.5 +, Chrome4 +, Safari4 +, Opera10.5 + и IE8 +.
Если нет шансов, что пользователь откроет 3 вкладки в течение 2 миллисекунд, можно использовать временную метку и сохранить ее в window.name и использовать это как ключ в вашем поиске. Значение window.name останется с вкладкой до ее закрытия.
Вы должны использовать html5, но sessionStorage в сочетании со случайным директивом, похоже, будет тем, что вы хотите.
SessionStorage - за вкладку / окно, поэтому вы можете определить случайное число в sessionStorage и сначала получить его, если существует:
var tabID = sessionStorage.tabID ? sessionStorage.tabID : sessionStorage.tabID = Math.random();
UPDATE: в некоторых случаях у вас может быть такое же sessionStorage в нескольких (например, при дублировании вкладки). В этом случае следующий код может помочь:
var tabID = sessionStorage.tabID && sessionStorage.closedLastTab !== '2' ? sessionStorage.tabID : sessionStorage.tabID = Math.random();
sessionStorage.closedLastTab = '2';
$(window).on('unload beforeunload', function() {
sessionStorage.closedLastTab = '1';
});
По крайней мере, для хрома, есть официальный ответ с 2013 года: API-интерфейс chrome.tabs .