Версия jQuery:
var mydiv = $("#scroll");
mydiv.scrollTop(mydiv.prop("scrollHeight"));
Работает из jQuery 1.6
См. Разделительные строки :
Здесь представлены различные способы разбиения строки на список подстрок, разбивая исходную строку на вхождениях какого-либо разделителя (символ , набор символов или шаблон). Обычно это называется функцией разделения строк [2].
Вот функция:
function split(pString, pPattern)
local Table = {} -- NOTE: use {n = 0} in Lua-5.0
local fpat = "(.-)" .. pPattern
local last_end = 1
local s, e, cap = pString:find(fpat, 1)
while s do
if s ~= 1 or cap ~= "" then
table.insert(Table,cap)
end
last_end = e+1
s, e, cap = pString:find(fpat, last_end)
end
if last_end <= #pString then
cap = pString:sub(last_end)
table.insert(Table, cap)
end
return Table
end
Вызвать это так:
list=split(string_to_split,pattern_to_match)
например:
list=split("1:2:3:4","\:")
Подробнее здесь: http://lua-users.org/wiki/SplitJoin
Поскольку у кошки есть более одного способа кошки, вот мой подход:
Код:
#!/usr/bin/env lua
local content = [=[
Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.
]=]
local function split(str, sep)
local result = {}
local regex = ("([^%s]+)"):format(sep)
for each in str:gmatch(regex) do
table.insert(result, each)
end
return result
end
local lines = split(content, "\n")
for _,line in ipairs(lines) do
print(line)
end
Выход:
Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.
Объяснение:
Функция gmatch
работает как итератор, она извлекает все строки, соответствующие regex
. regex
принимает все символы, пока не найдет разделитель.
Если вы разделяете строку в Lua, вы должны попробовать методы string.gmatch () или string.sub (). Используйте метод string.sub (), если вам известен индекс, который вы хотите разбить на строку, или используйте string.gmatch (), если вы проанализируете строку, чтобы найти местоположение для разделения строки на.
Пример использования string.gmatch () из Справочное руководство Lua 5.1 :
t = {}
s = "from=world, to=Lua"
for k, v in string.gmatch(s, "(%w+)=(%w+)") do
t[k] = v
end
Если вы просто хотите перебирать токены, это довольно аккуратно:
line = "one, two and 3!"
for token in string.gmatch(line, "[^%s]+") do
print(token)
end
Выход:
one,
two
и
3!
blockquote>Краткое объяснение: шаблон «[^% s] +» соответствует каждой непустой строке между пробельные символы.
%S
равен тому, который вы упомянули, поскольку %S
является отрицанием %s
, например %D
является отрицанием %d
. Кроме того, %w
равно [A-Za-z0-9_]
(другие символы могут поддерживаться в зависимости от вашего локали).
– Lars Gyrup Brink Nielsen
3 January 2014 в 00:00
Я использовал приведенные выше примеры для создания собственной функции. Но недостающая часть для меня автоматически ускользала от магических символов.
Вот мой вклад:
function split(text, delim)
-- returns an array of fields based on text and delimiter (one character only)
local result = {}
local magic = "().%+-*?[]^$"
if delim == nil then
delim = "%s"
elseif string.find(delim, magic, 1, true) then
-- escape magic
delim = "%"..delim
end
local pattern = "[^"..delim.."]+"
for w in string.gmatch(text, pattern) do
table.insert(result, w)
end
return result
end
Мне нравится это короткое решение
function split(s, delimiter)
result = {};
for match in (s..delimiter):gmatch("(.-)"..delimiter) do
table.insert(result, match);
end
return result;
end
Многие из этих ответов допускают только односимвольные разделители или не имеют дело с краевыми случаями (например, пустые разделители), поэтому я думал, что я дам более окончательное решение.
две функции, gsplit
и split
, адаптированные из кода в расширении Scribunto MediaWiki , который используется на вики, например, в Википедии. Код лицензируется в соответствии с GPL v2 . Я изменил имена переменных и добавил комментарии, чтобы сделать код немного понятным, и я также изменил код, чтобы использовать обычные строковые шаблоны Lua вместо шаблонов Scribunto для строк Unicode.
-- gsplit: iterate over substrings in a string separated by a pattern
--
-- Parameters:
-- text (string) - the string to iterate over
-- pattern (string) - the separator pattern
-- plain (boolean) - if true (or truthy), pattern is interpreted as a plain
-- string, not a Lua pattern
--
-- Returns: iterator
--
-- Usage:
-- for substr in gsplit(text, pattern, plain) do
-- doSomething(substr)
-- end
local function gsplit(text, pattern, plain)
local splitStart, length = 1, #text
return function ()
if splitStart then
local sepStart, sepEnd = string.find(text, pattern, splitStart, plain)
local ret
if not sepStart then
ret = string.sub(text, splitStart)
splitStart = nil
elseif sepEnd < sepStart then
-- Empty separator!
ret = string.sub(text, splitStart, sepStart)
if sepStart < length then
splitStart = sepStart + 1
else
splitStart = nil
end
else
ret = sepStart > splitStart and string.sub(text, splitStart, sepStart - 1) or ''
splitStart = sepEnd + 1
end
return ret
end
end
end
-- split: split a string into substrings separated by a pattern.
--
-- Parameters:
-- text (string) - the string to iterate over
-- pattern (string) - the separator pattern
-- plain (boolean) - if true (or truthy), pattern is interpreted as a plain
-- string, not a Lua pattern
--
-- Returns: table (a sequence table containing the substrings)
local function split(text, pattern, plain)
local ret = {}
for match in gsplit(text, pattern, plain) do
table.insert(ret, match)
end
return ret
end
Некоторые примеры используемой функции split
:
local function printSequence(t)
print(unpack(t))
end
printSequence(split('foo, bar,baz', ',%s*')) -- foo bar baz
printSequence(split('foo, bar,baz', ',%s*', true)) -- foo, bar,baz
printSequence(split('foo', '')) -- f o o
Вы можете использовать этот метод:
function string:split(delimiter)
local result = { }
local from = 1
local delim_from, delim_to = string.find( self, delimiter, from )
while delim_from do
table.insert( result, string.sub( self, from , delim_from-1 ) )
from = delim_to + 1
delim_from, delim_to = string.find( self, delimiter, from )
end
table.insert( result, string.sub( self, from ) )
return result
end
delimiter = string.split(stringtodelimite,pattern)
Просто сидит на разделителе
local str = 'one,two'
local regxEverythingExceptComma = '([^,]+)'
for x in string.gmatch(str, regxEverythingExceptComma) do
print(x)
end
Так же, как string.gmatch
найдет шаблоны в строке, эта функция найдет вещи между шаблонами :
function string:split(pat)
pat = pat or '%s+'
local st, g = 1, self:gmatch("()("..pat..")")
local function getter(segs, seps, sep, cap1, ...)
st = sep and seps + #sep
return self:sub(segs, (seps or 0) - 1), cap1 or sep, ...
end
return function() if st then return getter(st, g()) end end
end
По умолчанию он возвращает все, что разделено пробелами.
Вот мое действительно простое решение. Используйте функцию gmatch для захвата строк, которые содержат по крайней мере один символ НИЧЕГО, кроме желаемого разделителя. По умолчанию разделителем является ЛЮБАЯ пробел (% s в Lua):
function mysplit(inputstr, sep)
if sep == nil then
sep = "%s"
end
local t={} ; i=1
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
t[i] = str
i = i + 1
end
return t
end
'foo,,bar'
. Вы получаете {'foo','bar'}
вместо {'foo', '', 'bar'}
– andras
19 September 2016 в 21:38