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]; 

http://jsfiddle.net/mblase75/8uWCN/

如上所述,使用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]); } 

相关地,您可能对这些基准感兴趣。 请注意,只有在可以确定分隔符存在的情况下, slicesubstrsubstring的选项才有效。 如果可能缺少分隔符(如第一个示例中所示),请使用其他用户建议的split版本。