检索两个字符之间的子字符串

时间:2012-02-16 14:32:00

标签: javascript regex

我有这样的字符串

  var str = "#it
              itA
              itB
              _
             #et
              etA
              etB
             _
             etC
             etD"

如何在#和_之间检索元素。截至目前,我正在用新行拆分文本但无法进行此操作。请帮帮我。请使用这个小提琴http://jsfiddle.net/h728C/2/

6 个答案:

答案 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)

你可以使用这种正则表达式:

str.replace(/\s/g, "").match(/#(.*?)_/g, "$1");

请参阅此fiddle

答案 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#.","#","#");