如何检索两个相同字符之间的字符串

时间:2014-05-16 03:10:11

标签: javascript string

我知道如何使用substring()但是这里有一个问题,我想在两个" _"之间检索一个数字。来自未知的字符串长度。这是我的字符串,例如。

7_28_li

我希望得到28.我怎么能这样做?

感谢。

4 个答案:

答案 0 :(得分:1)

正则表达式

'7_28_li'.match(/_(\d+)_/)[1]

匹配内的斜杠使其内容为正则表达式。

  • _字面意思

  • ()用于稍后检索内容(目标号码)

  • \d是一个数字字符

  • +是"一个或多个"。

最后的[1]访问从第一组parens匹配的内容,即一个或多个(+)个数字(\d)。

循环

var str = '7_28_li';
var state = 0; //How many underscores have gone by
var num = '';
for (var i = 0; i < str.length; i++) {
    if (str[i] == '_') state++;
    else if (state == 1) num += str[i];
};
num = parseInt(num);

可能效率更高,但又长又丑。

分割

'7_28_li'.split('_')[1]

将其拆分为数组,然后获取第二个元素。

的IndexOf

var str = "7_28_li";
var num = str.substring(str.indexOf('_') + 1, str.indexOf('_', 2));

获取起点和终点。使用indexOf鲜为人知的第二个参数。这比lastIndexOf效果更好,因为它保证在_ s之间给出第一个数字,即使有超过2个下划线。

答案 1 :(得分:1)

首先找到_的索引,然后找到_的下一个位置。然后得到它们之间的子串。

var data = "7_28_li";
var idx = data.indexOf("_");
console.log(data.substring(idx + 1, data.indexOf("_", idx + 1)));
# 28

你可以更好地理解,比如

var data = "7_28_li";
var first = data.indexOf("_");
var next  = data.indexOf("_", first + 1);
console.log(data.substring(first + 1, next));
# 28

注意: indexOf的第二个参数是指定从哪里开始查找。

答案 2 :(得分:0)

最简单的方法可能就是在您的字符串上调用split,并使用分隔符(在这种情况下为&#34; _&#34;)作为参数。它将返回一个包含7,28和li作为元素的数组,因此您可以选择中间的数组。

"7_28_li".split("_")[1]

如果它总是3个元素,这将有效。如果还有更多,请将length属性除以2并将其置于最右边以获得正确的元素。

var splitstring = "7_28_li".split("_")
console.log(splitstring[Math.floor(splitstring.length/2)]);

我不确定你是如何处理长度字符串的,但你所要做的就是设置一个if语句,然后做你想做的任何事情。

答案 3 :(得分:0)

如果你知道会有2个下划线,你可以使用这个

 var str = "7_28_li";
 var res = str.substring(str.indexOf("_") +1, str.lastIndexOf("_"));

如果要查找前2个下划线之间的字符串

var str = "7_28_li";
var firstIndex = str.indexOf("_");
var secondIndex = str.indexOf("_", firstIndex+1);
var res = str.substring(firstIndex+1, secondIndex);