我有这样的字符串
var str = "#it
itA
itB
_
#et
etA
etB
_
etC
etD"
如何在#和_之间检索元素。截至目前,我正在用新行拆分文本但无法进行此操作。请帮帮我。请使用这个小提琴http://jsfiddle.net/h728C/2/
答案 0 :(得分:6)
如果你只想要第一个字符串BETWEEN,你可以使用:
var mys= str.substring(str.indexOf('#')+1,str.indexOf("_"));
这将返回:“it it it it”
答案 1 :(得分:4)
我在fidde发布了一些解决方案。它使用正则表达式
var str = $('#a').text();
var pattern = /#([\s\S]*?)(?=_)/g;
var result = str.match(pattern);
for (var i = 0; i < result.length; i++) {
if (result[i].length > 1) {
result[i] = result[i].substring(1, result[i].length);
}
alert(result[i]);
}
剥去结束并开始。
修改
我updated the fiddle和代码。现在它删除了开始#
和结束_
。
你可以使用其中之一。无论哪个方便。
答案 2 :(得分:1)
我不明白为什么会这样做但是这样有效:
var str = $('#a').text();
var results = [];
$.each(str.split("_"), function(){
var a = this.toString().split("#");
if(a.length===2) results.push(a[1]);
});
console.log(results);
答案 3 :(得分:1)
答案 4 :(得分:1)
获取数组的一行解决方案
var arrStr = str.split(/[#_]/);
答案 5 :(得分:0)
我不建议在这里使用正则表达式,因为它可以通过其他方法更有效地完成。
function extractString(template, initChar, finalChar) {
let i = 0;
let data = [];
do {
if (template[i] == initChar) {
for (let j = i + 1; j < template.length; j++) {
if (template[j] == finalChar) {
data[data.length] = template.slice(i + 1, j);
i = j + 1;
break;
}
}
}
}
while (++i < template.length);
console.log(data)
return data;
}
extractString("#adj#, #brown# fox jumps over the lazy #dog#.","#","#");