web-dev-qa-db-ja.com

javascriptを使って2文字間の部分文字列を取得する

私は大きな文字列の中から文字列を抽出しようとしています。それは ':'と ';'の間にあるすべてのものを取得します。

現在

Str = 'MyLongString:StringIWant;'

望ましい出力

newStr = 'StringIWant'
132
Rob

あなたはこれを試すことができます

var mySubString = str.substring(
    str.lastIndexOf(":") + 1, 
    str.lastIndexOf(";")
);
302

これも試すことができます。

var str = 'one:two;three';    
str.split(':').pop().split(';')[0]; // returns 'two'
71
tsds

split()を使う

var s = 'MyLongString:StringIWant;';
var arrStr = s.split(/[:;]/);
alert(arrStr);

arrStr:または;で区切られたすべての文字列を含みます
だからfor-loopを通してすべての文字列にアクセスします

for(var i=0; i<arrStr.length; i++)
    alert(arrStr[i]);
38
asifsid88

@Babasaheb Gosavi答えは、部分文字列( ":"と ";")が1回見つかった場合に最適です。しかし、一度複数回出現すると、少しトリッキーになるかもしれません。


私がこれまでに複数のプロジェクトで作業するために考え出した最良の解決策は、オブジェクト内で4つのメソッドを使用することです。

  • 最初の方法:は実際には2つの文字列の間から部分文字列を取得することです(ただし、結果は1つだけになります)。
  • 2番目の方法:は、直前と最後の部分文字列の前後にある検索結果を削除します。
  • 番目の方法:は、文字列に対して上記の2つの方法を再帰的に実行します。
  • 4番目の方法: 3番目の方法を適用して結果を返します。

コード

十分に話して、コードを見てみましょう:

var getFromBetween = {
    results:[],
    string:"",
    getFromBetween:function (sub1,sub2) {
        if(this.string.indexOf(sub1) < 0 || this.string.indexOf(sub2) < 0) return false;
        var SP = this.string.indexOf(sub1)+sub1.length;
        var string1 = this.string.substr(0,SP);
        var string2 = this.string.substr(SP);
        var TP = string1.length + string2.indexOf(sub2);
        return this.string.substring(SP,TP);
    },
    removeFromBetween:function (sub1,sub2) {
        if(this.string.indexOf(sub1) < 0 || this.string.indexOf(sub2) < 0) return false;
        var removal = sub1+this.getFromBetween(sub1,sub2)+sub2;
        this.string = this.string.replace(removal,"");
    },
    getAllResults:function (sub1,sub2) {
        // first check to see if we do have both substrings
        if(this.string.indexOf(sub1) < 0 || this.string.indexOf(sub2) < 0) return;

        // find one result
        var result = this.getFromBetween(sub1,sub2);
        // Push it to the results array
        this.results.Push(result);
        // remove the most recently found one from the string
        this.removeFromBetween(sub1,sub2);

        // if there's more substrings
        if(this.string.indexOf(sub1) > -1 && this.string.indexOf(sub2) > -1) {
            this.getAllResults(sub1,sub2);
        }
        else return;
    },
    get:function (string,sub1,sub2) {
        this.results = [];
        this.string = string;
        this.getAllResults(sub1,sub2);
        return this.results;
    }
};

使い方?

例:

var str = 'this is the haystack {{{0}}} {{{1}}} {{{2}}} {{{3}}} {{{4}}} some text {{{5}}} end of haystack';
var result = getFromBetween.get(str,"{{{","}}}");
console.log(result);
// returns: [0,1,2,3,4,5]
25
Alex C.
var s = 'MyLongString:StringIWant;';
/:([^;]+);/.exec(s)[1]; // StringIWant
17
otakustay

私はこの方法が好きです:

var Str = 'MyLongString:StringIWant;';
var tmpStr  = Str.match(":(.*);");
var newStr = tmpStr[1];
//newStr now contains 'StringIWant'
9
Shane Gib.

@tsdsの方法を使いましたが、関数splitを使うだけです。

var str = 'one:two;three';    
str.split(':')[1].split(';')[0] // returns 'two'

注意事項:配列の '1'インデックスにアクセスする文字列にtherreが ":"でない場合、エラーが発生します。 str.split( ':')[1]

したがって、不確実性がある場合は@tsds方式の方が安全です。

str.split(':').pop().split(';')[0]
3
Timar Ivo Batis

これも使えます。

function extractText(str,delimiter){
  if (str && delimiter){
    var firstIndex = str.indexOf(delimiter)+1;
    var lastIndex = str.lastIndexOf(delimiter);
    str = str.substring(firstIndex,lastIndex);
  }
  return str;
}


var quotes = document.getElementById("quotes");

// &#34 - represents quotation mark in HTML
<div>


  <div>
  
    <span id="at">
      My string is @between@ the "at" sign
    </span>
    <button onclick="document.getElementById('at').innerText = extractText(document.getElementById('at').innerText,'@')">Click</button>
  
  </div>
  
  <div>
    <span id="quotes">
      My string is "between" quotes chars
    </span>
    <button onclick="document.getElementById('quotes').innerText = extractText(document.getElementById('quotes').innerText,'&#34')">Click</button>
  
  </div>

</div>
1
Meir Gabay

jQueryを使う:

get_between <- function(str, first_character, last_character) {
    new_str = str.match(first_character + "(.*)" + last_character)[1].trim()
    return(new_str)
    }

文字列

my_string = 'and the thing that ! on the @ with the ^^ goes now' 

用法

get_between(my_string, 'that', 'now')

結果

"! on the @ with the ^^ goes
1
Cybernetic

JavaScriptを使用して2文字間の部分文字列を取得するにはこれを試してください。

        $("button").click(function(){
            var myStr = "MyLongString:StringIWant;";
            var subStr = myStr.match(":(.*);");
            alert(subStr[1]);
        });

@からの引用 jQueryを使って2つの文字の間のサブストリングを探す

0
Ketan Savaliya

私が作った小さな関数で、文字列をつかむことができ、(オプションで)一致する単語の数をスキップして特定のインデックスをつかむことができます。

また、startfalseに設定すると、文字列の先頭が使用され、endfalseに設定すると、文字列の末尾が使用されます。

pos1を使用するstartテキストの位置に設定すると、1startの最初の出現を使用します

pos2pos1と同じことを行いますが、endの場合、1endの後にのみ最初にstartが出現し、endの前のstartの出現は無視されます。

function getStringBetween(str, start=false, end=false, pos1=1, pos2=1){
  var newPos1 = 0;
  var newPos2 = str.length;

  if(start){
    var loops = pos1;
    var i = 0;
    while(loops > 0){
      if(i > str.length){
        break;
      }else if(str[i] == start[0]){
        var found = 0;
        for(var p = 0; p < start.length; p++){
          if(str[i+p] == start[p]){
            found++;
          }
        }
        if(found >= start.length){
          newPos1 = i + start.length;
          loops--;
        }
      }
      i++;
    }
  }

  if(end){
    var loops = pos2;
    var i = newPos1;
    while(loops > 0){
      if(i > str.length){
        break;
      }else if(str[i] == end[0]){
        var found = 0;
        for(var p = 0; p < end.length; p++){
          if(str[i+p] == end[p]){
            found++;
          }
        }
        if(found >= end.length){
          newPos2 = i;
          loops--;
        }
      }
      i++;
    }
  }

  var result = '';
  for(var i = newPos1; i < newPos2; i++){
    result += str[i];
  }
  return result;
}
0
SwiftNinjaPro