我知道如何使用substring()但是这里有一个问题,我想在两个" _"之间检索一个数字。来自未知的字符串长度。这是我的字符串,例如。
7_28_li
我希望得到28.我怎么能这样做?
感谢。
答案 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]
将其拆分为数组,然后获取第二个元素。
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);