javascript或jquery相当于PHP的strtok()?
有没有相当于PHP strtok()的javascript? 在PHP中,我会使用
$sub = strtok($string, ':');
( 感谢菲尔的回答 )
但是,我需要在javascript中做同样的事情。
我有一个包含如下值的选择列表:
Leckerli One Lekton (plus italic and bold) OFL Sorts Mill Goudy TT (plus italic)
在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'); } );
使用:
$('#myFonts :selected').val().split(':')[0]
这是一个本机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; }
使用带有substr或slice的 indexOf比使用带有pop或shift的split更快。 见jsperf.com/tok
你正在寻找split
方法。 通过将长度限制为1,您可以在冒号前提取值
var beforeColon = value.split(':', 1)[0]
这将获得冒号之前的所有内容(如果有)或整个值(如果没有):
var myFont = $('#myFonts :selected').val().split(':')[0];
如上所述,使用split for single char delimeter。 对于多个字符分隔符我写了这个:
function strtok(src, delim){ delim_escaped = new RegExp('[' + delim.replace(/[\[\]\(\)\*\+\?\.\\\^\$\|\#\-\{\}\/]/g, "\\$&") + ']', 'g'); return src.replace(delim_escaped, delim[0]).split(delim[0]); }
相关地,您可能对这些基准感兴趣。 请注意,只有在可以确定分隔符存在的情况下, slice
, substr
和substring
的选项才有效。 如果可能缺少分隔符(如第一个示例中所示),请使用其他用户建议的split
版本。