javascript或jquery相当于PHP的strtok()?

Reg*_*dit 6 regex jquery

有没有一个javascript相当于PHPs strtok()?在PHP中,我会使用

$sub = strtok($string, ':'); 
Run Code Online (Sandbox Code Playgroud)

(感谢菲尔的回答)

但是,我需要在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>
Run Code Online (Sandbox Code Playgroud)

在jQuery更改事件中,我需要提取"值"字段.但是,如果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');
    }
);
Run Code Online (Sandbox Code Playgroud)

top*_*pek 9

使用:

$('#myFonts :selected').val().split(':')[0]
Run Code Online (Sandbox Code Playgroud)


rya*_*nve 5

这是一个原生 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;
}
Run Code Online (Sandbox Code Playgroud)

将indexOfsubstrslice 一起使用比将split与pop 或shift一起使用要快。请参阅jsperf.com/tok