是否存在与PHPs strtok()相当的javascript?在PHP中,我使用
$sub = strtok($string, ':');
(Thanks to Phil's answer for that)
但是,我需要在javascript中执行相同操作。
我有一个包含如下值的选择列表:
<select id="myFonts">
<option value='Leckerli One'>Leckerli One</option>
<option value='Lekton:regular,italic,bold'>Lekton (plus italic and bold)</option>
<option value='OFL Sorts Mill Goudy TT:regular,italic'>OFL Sorts Mill Goudy TT (plus italic)</option>
</select>
在jQuery更改事件中,我需要提取“value”字段。但是,如果value字段包含冒号,我需要在冒号之前拉出字符串内容,然后不返回任何内容。
例如,在上面的示例中,我需要返回的值:
Leckerli One Lekton OFL Sorts Mill Goudy TT
这是我目前的jQuery(当值包含冒号和其他属性时无法正常工作):
$('#myFonts').change
(
function()
{
var myFont = $('#myFonts :selected').val();
$('#fontPreviewSrc').attr('href','http://fonts.googleapis.com/css?family='+myFont);
$('.fontPreview').attr('style','font-family:'+myFont+';font-style:normal;font-size:2em;padding-top:10px;white-space:nowrap');
}
);
答案 0 :(得分:8)
使用:
$('#myFonts :selected').val().split(':')[0]
答案 1 :(得分:4)
这是一个本地JavaScript解决方案,支持多个字符,与PHP strtok()的方式相同:
/**
* @param {string} s the string to search in
* @param {string} chars the chars to search for
* @param {boolean=} rtl option to parse from right to left
* @return {string}
* @example tok( 'example.com?q=value#frag', '?#' ); // 'example.com'
* @example tok( 'example.com?q=value#frag', '?#', true ); // 'frag'
*/
function tok ( s, chars, rtl ) {
var n, i = chars.length;
rtl = true === rtl;
while ( i-- ) {
n = s.indexOf(chars[i]);
s = n < 0 ? s : rtl
? s.substr(++n)
: s.substr(0, n);
}
return s;
}
将indexOf与substr或slice一起使用比使用split使用pop或shift更快。见jsperf.com/tok
答案 2 :(得分:3)
您正在寻找split
方法。通过将长度限制为1,您可以在冒号之前提取值
var beforeColon = value.split(':', 1)[0]
答案 3 :(得分:1)
如果有冒号,这将获取冒号前的所有内容,如果没有冒号,则会获得整个值:
var myFont = $('#myFonts :selected').val().split(':')[0];
答案 4 :(得分:1)
如上所述,使用split for single char delimiter。 对于多个字符分隔符,我写了这个:
function strtok(src, delim){
delim_escaped = new RegExp('[' + delim.replace(/[\[\]\(\)\*\+\?\.\\\^\$\|\#\-\{\}\/]/g, "\\$&") + ']', 'g');
return src.replace(delim_escaped, delim[0]).split(delim[0]);
}
答案 5 :(得分:0)
相关地,您可能对these benchmarks感兴趣。请注意,slice
,substr
和substring
的选项仅在您确定分隔符存在时才有效。如果分隔符可能不存在(如第一个示例中所示),请使用其他用户建议的split
版本。
答案 6 :(得分:0)
我不知道javascript中php的strtok
函数的确切含义(我正在搜索相同的函数),但是我注意到这里的所有答案都错过了strtok函数的细微差别,并想指出出来。
如果您要做的只是基于单个标记分解字符串,那么各种分割和切片方法都可以,但是strtok不仅能做到这一点。它走一串,并记住它停在哪里。就像在后台使用指针一样。
考虑以下字符串:
ullamcorper dignissim非非Turpis。 Donec坐在amet pharetra上。 Suspendisse tristique luctus%velit,ac maximus tortor ullamcorper等。 Vivamus vitae magna a lectus mollis tempus ac commodo orci ^。 Donec aliquam malesuada massa sed interdum。 Curabitur amet exdictum,sollicitudin eros non,rutrum enim。
如果您想用粗体标签将%
和^
之间的文本换行,您该怎么做?您可以拆分,获取索引等,但是strtok
函数可以让您以更复杂的方式遍历字符串:
// assume the `$string` variable holds the big string above
$pre = strtok($string, '%');
$boldme = strtok('^');
$bolded = "<b>$boldme</b>";
$post = strtok("\n");
$newstring = implode("", [$pre, $bolded, $post]);
echo $newstring
现在,您的新字符串如下所示:
ullamcorper dignissim非非Turpis。 Donec坐在amet pharetra上。 Suspendisse tristique luctus velit,ac maximus tortor ullamcorper等。 Vivamus vitae magna a lectus mollis tempus ac commodo orci 。 Donec aliquam malesuada massa sed interdum。 Curabitur的履历不限,而sollicitudin eros non,rutrum enim。”
strtok
函数将允许您在不同的时间使用不同的令牌来分解字符串,并且由于该函数在初始化后作用于相同的字符串,因此可以在调用之间执行逻辑。
我不知道可以完成所有这些操作的php函数,但是如果有人愿意,我很想知道;)