JavaScript中与MySQL函数SUBSTRING_INDEX()相对应的函数是什么?

3
在MySQL中,SUBSTRING_INDEX()函数返回指定分隔符出现次数之前的子字符串。
在JavaScript中是否有等价的函数?我需要执行相同的操作,但是在JavaScript中对一个字符串值进行操作。
3个回答

6

MySQL:

SELECT SUBSTRING_INDEX('www.stackoverflow.com', '.', 1) result;
+--------+
| result |
+--------+
| www    |
+--------+
1 row in set (0.00 sec)

SELECT SUBSTRING_INDEX('www.stackoverflow.com', '.', 2) result;
+-------------------+
| result            |
+-------------------+
| www.stackoverflow |
+-------------------+
1 row in set (0.00 sec)

JavaScript:

function substringIndex (input, delimiter, index) {
  var arr = input.split(delimiter);
  arr.splice(index, arr.length - index);
  return arr.join(delimiter);
}

console.log(substringIndex('www.stackoverflow.com', '.', 1)); 
// www

console.log(substringIndex('www.stackoverflow.com', '.', 2)); 
// www.stackoverflow

0

indexOf 可能是你需要的:http://www.w3schools.com/jsref/jsref_IndexOf.asp

当然,你需要将它与substr这样的东西结合起来使用:http://www.w3schools.com/jsref/jsref_substr.asp

编辑: 我越看越觉得难以给出像你要求的那样完全相同的东西。一种方法是使用正则表达式,或者,我编写了一个简单的小函数,让你可以使用几乎与SUBSTRING_INDEX()相同的语法。

function substringIndex(str, char, occurrence){
    var newStr = '';
    var occurrenceMatches = 0;

    for (var i=0; str.length; i++){
        if (str.charAt(i)==char) occurrenceMatches++;
        if (occurrenceMatches==occurrence) break;
        newStr += str.charAt(i);
    }

    return newStr;
}
alert(substringIndex('www.mysql.com', '.', 2));

我的split、splice、join方法怎么样?它看起来与MySQL函数等效,比你建议的for循环方法更简洁。 - Daniel Vassallo
同意。你的例子更漂亮。 - Bart

0

虽然这是一个老问题,但为了记录和帮助其他人,以下是对所选答案的轻微更新,使substring_index的工作方式与MySQL完全相同,即还允许负索引。

function substring_index( input, delimiter, index ) {
    var arr = input.split( delimiter );
    if( index < 0 ){
       index = arr.length + index;
       arr.splice( 0, index );
    }else{
       arr.splice( index, arr.length - index );
    }
       return arr.join( delimiter );
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接