2011-10-20 67 views
3

是否有一個相當於PHP的strtok()?在PHP中,我會使用javascript或jquery相當於PHP的strtok()?

$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的變化情況下,我需要提取「值」字段。但是,如果值字段包含一個冒號,我需要在冒號前拉動字符串內容,並在它後面返回任何內容。

舉例來說,在我上面的例子中,我需要返回的值:

Leckerli一個 Lekton OFL排序穆勒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'); 
    } 
); 
+3

你有沒有試過'split()' – Amit

回答

6

用途:

$('#myFonts :selected').val().split(':')[0] 
2

您正在尋找的split方法。通過限制長度爲1,你可以在冒號之前提取值

支持多個字符以同樣的方式PHP strtok()確實
var beforeColon = value.split(':', 1)[0] 
4

這裏有一個本地JavaScript解決方案:

/** 
* @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; 
} 

使用indexOfsubstrslice比彈出或移動時使用split要快。請參閱jsperf.com/tok

+1

超好的工作。特別是rtl。 –

+0

@ user1869322謝謝=] – ryanve

+1

...複製並記入。 –

1

如上所述,對單個字符分隔符使用分隔符。 對於多個字符分隔符我寫了這個:

function strtok(src, delim){ 
    delim_escaped = new RegExp('[' + delim.replace(/[\[\]\(\)\*\+\?\.\\\^\$\|\#\-\{\}\/]/g, "\\$&") + ']', 'g'); 
    return src.replace(delim_escaped, delim[0]).split(delim[0]); 
} 
0

與此相關的,你可能有興趣在these benchmarks。請注意,slicesubstrsubstring的選項僅在您確定存在分隔符時纔有效。如果分隔符可能不存在(如第一個示例中所示),請根據其他用戶的建議使用split的版本。