জাভাস্ক্রিপ্ট ব্যবহার করে দুটি অক্ষরের মধ্যে সাবস্ট্রিং পান


194

আমি একটি বৃহত্তর স্ট্রিংয়ের মধ্যে থেকে একটি স্ট্রিং বের করার চেষ্টা করছি যেখানে এটি ':' এবং ''; 'এর অভ্যন্তরে সবকিছু পেয়ে যায়।

বর্তমান

Str = 'MyLongString:StringIWant;'

পছন্দসই আউটপুট

newStr = 'StringIWant'

উত্তর:


424

আপনি এটি চেষ্টা করতে পারেন

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

4
তুচ্ছ সমাধান কিন্তু কার্যকর যদি আপনি নিয়মিত প্রকাশগুলি এড়াতে চান তবে বিশেষভাবে কার্যকর।
নিকোলে ফ্রিক

8
কেউ কি জানেন যে আমি আমার শুরু এবং শেষের স্ট্রিংয়ের মধ্যে একটি স্ট্রিংয়ের প্রতিটি ঘটনার জন্য এটি কীভাবে করব?
মার্কসকোড

6
ভার্চুয়ালট্রোল ৮ সেকেন্ড? পবিত্র জাহান্নাম আমি আপনার "সমাধান" দেখতে চাই: ডি
টম

@ টম যদিও প্রসঙ্গে "8 সেকেন্ড" কোনও অর্থবহ তথ্য বহন করে না - তবে আমি নিশ্চিত যে এটি কোনও একক রানের পার্থক্য নয়)
অহং

7
আমি নিশ্চিত যে তার মানে যে এই উত্তরটি তার আগে 8 সেকেন্ড আগে পোস্ট করা হয়েছিল। তিনি যখন এটি লিখছিলেন।
ম্যাক্সসান্টোস

110

আপনি এটি ব্যবহার করে দেখতে পারেন:

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

13
কোন রেজেক্স। এটা ভাল।
flimflam57

str.split(':').pop().split(';')[0]ব্যবহারের চেয়ে দ্রুত হতে পারে.shift()
মিস্ট্রিপ্যাঙ্কেকে

48

ব্যবহার 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]);

যে স্ট্রিংটি আমি চাইছি তার মধ্যে [] এবং এটি কাজ করছে না ... প্রাক্তন: 'মাইলংস্ট্রিং [স্ট্রিংআইওয়ান্ট]'। বিভক্ত (/ [[]] /);
ফিলিপ

1
@ ফিলিপ আপনার ব্যবহারের ক্ষেত্রে, এই রেজেক্সটি ব্যবহার করুন \[(.*?)\] ---> সংক্ষেপে আপনাকে স্কোয়ার বন্ধনীগুলি থেকে পালাতে হবে, কারণ [] রেজেক্সে অক্ষর শ্রেণি নির্দেশ করে।
asifsid88

33

@ বাবাসাহেব গোসাভি উত্তরটি সঠিক, যদি আপনার সাবস্ট্রিংগুলির একটির উপস্থিতি (":" এবং ";") থাকে। তবে একবার আপনার একাধিক ঘটনা উপস্থিত হলে এটি সামান্য কিছুটা জটিল হয়ে উঠতে পারে।


একাধিক প্রকল্পে কাজ করার জন্য আমি যে সর্বোত্তম সমাধানটি নিয়ে এসেছি তা হ'ল কোনও জিনিসের ভিতরে চারটি পদ্ধতি ব্যবহার করা।

  • প্রথম পদ্ধতি: আসলে দুটি স্ট্রিংয়ের মধ্য থেকে একটি স্ট্রিং নেওয়া (তবে এটি কেবল একটি ফলাফল খুঁজে পাবে)।
  • দ্বিতীয় পদ্ধতি: এর পরে এবং তার আগে সাবস্ট্রিংগুলির সাথে সর্বাধিক সন্ধান পাওয়া ফলাফল (হবে) সরিয়ে ফেলবে।
  • তৃতীয় পদ্ধতি: উপরের দুটি পদ্ধতি পুনরাবৃত্তভাবে একটি স্ট্রিংয়ে করবে।
  • চতুর্থ পদ্ধতি: তৃতীয় পদ্ধতি প্রয়োগ করে ফলাফলটি ফিরিয়ে দেবে।

কোড

এত কথা বলা, কোডটি দেখুন:

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]

একটি পথ RangeError: Maximum call stack size exceededব্যতিক্রম।
আলেজান্দ্রো কোটিলা

1
দুর্দান্ত উত্তর। এই আমার প্রয়োজন ছিল।
আন্দ্রেস ফিলিপ

20
var s = 'MyLongString:StringIWant;';
/:([^;]+);/.exec(s)[1]; // StringIWant

1
উদ্দেশ্য কি ; ইন [^;]
যাক্কো কারহু

2
অনুবাদটি হ'ল: "/" প্যাটার্নটি শুরু করুন। একটি ":" সাথে "[]]" "^" এর যে কোনও কিছুর সাথে মিল দিন; আধা-কোলন নয় "+" বারবার এবং তারপরে একটি ";" আধা-কোলন এবং "/" প্যাটার্নটি শেষ করুন।
বিকাশকারী

15

আমি এই পদ্ধতিটি পছন্দ করি:

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

আমি এটি একটি শেয়ারপয়েন্ট 2013 ওয়েবপার্টে পরীক্ষা করেছি এবং যদি ভবিষ্যতে কাউকে সহায়তা করে তবে দুর্দান্ত কাজ করেছে!
শেন গীব

3
আপনি যে স্ট্রিংটি চান এটি "(" এবং ")" এর মধ্যে থাকলে এটি কাজ করতে পারে না
ব্র্যাভোকেল

4

আমি @tsds উপায় ব্যবহার করেছি তবে কেবল বিভক্ত ফাংশনটি ব্যবহার করে।

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

সতর্কতার শব্দ: যদি থ্রির কোনও ":" স্ট্রিতে অ্যারির '1' সূচকটি অ্যাক্সেস করে ত্রুটি ছুঁড়ে দেয়! str.split ( ':') [1]

সুতরাং অনিশ্চয়তা থাকলে @ এসটিএসএস উপায় নিরাপদ

str.split(':').pop().split(';')[0]

4
function substringBetween(s, a, b) {
    var p = s.indexOf(a) + a.length;
    return s.substring(p, s.indexOf(b, p));
}

// substringBetween('MyLongString:StringIWant;', ':', ';') -> StringIWant
// substringBetween('MyLongString:StringIWant;;', ':', ';') -> StringIWant
// substringBetween('MyLongString:StringIWant;:StringIDontWant;', ':', ';') -> StringIWant

এটি 2 টি চরিত্রের মধ্যে স্ট্রিংয়ের জন্য একটি দুর্দান্ত সমাধান
ফানি শশাঙ্ক

3

আপনি নিজের এক্সট্রাক্টরের একটি 'সংকলিত' সংস্করণ ফিরিয়ে দিতে উচ্চতর অর্ডার ফাংশনটি ব্যবহার করতে পারেন, এটি দ্রুততর।

রেগেক্সেস সহ এবং একবার বন্ধ হয়ে গেলে রেজেক্সগুলি সংকলন করে জাভাস্ক্রিপ্টের ম্যাচটি সমস্ত ম্যাচ ফিরবে।

এটি আমাদের চিহ্নিতকারী হিসাবে আমাদের যা ব্যবহার করেছে তা সরিয়ে ফেলেছে (অর্থাত্ {{:) এবং আমরা এর জন্য স্ট্রিংয়ের দৈর্ঘ্য স্লাইস সহ ব্যবহার করতে পারি।

function extract([beg, end]) {
    const matcher = new RegExp(`${beg}(.*?)${end}`,'gm');
    const normalise = (str) => str.slice(beg.length,end.length*-1);
    return function(str) {
        return str.match(matcher).map(normalise);
    }
}

একবার সংকলন করুন এবং একাধিকবার ব্যবহার করুন ...

const stringExtractor = extract(['{','}']);
const stuffIneed = stringExtractor('this {is} some {text} that can be {extracted} with a {reusable} function');
// Outputs: [ 'is', 'text', 'extracted', 'reusable' ]

বা একক সময় ব্যবহার ...

const stuffIneed = extract(['{','}'])('this {is} some {text} that can be {extracted} with a {reusable} function');
// Outputs: [ 'is', 'text', 'extracted', 'reusable' ]

জাভাস্ক্রিপ্ট এর দেখুন replace ফাংশনটি দেখুন তবে প্রতিস্থাপন যুক্তিটির জন্য একটি ফাংশন ব্যবহার করুন (উদাহরণস্বরূপ আপনি যদি একটি মিনি টেম্পলেট ইঞ্জিন (স্ট্রিং ইন্টারপোলেশন) করছেন ... লড্যাশ.জেট আপনি চাইলে মানগুলি পেতে সহায়তা করতে পারেন) প্রতিস্থাপন ? ...

আমার উত্তরটি অনেক দীর্ঘ তবে এটি কারও সাহায্য করতে পারে!


2

আপনি এটি ব্যবহার করতে পারেন ...

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>


2

সাবস্ট্রিংগুলিতে স্ট্রিং পান (1 টিরও বেশি অক্ষর রয়েছে)

function substrInBetween(whole_str, str1, str2){
  strlength1 = str1.length;
  return whole_str.substring(
                whole_str.indexOf(str1) + strlength1, 
                whole_str.indexOf(str2)
               );

   }

দ্রষ্টব্য আমি এর indexOf()পরিবর্তে ব্যবহার করি lastIndexOf()যাতে এটি str স্ট্রিংগুলির প্রথম উপস্থিতিগুলি পরীক্ষা করে


দুর্দান্ত এবং খুব পঠনযোগ্য ফাংশন। তবে strlength1ভেরিয়েবলের উদ্দেশ্য কী ? পরিবর্তে মানটি ইনলাইন ব্যবহার করা উচিত। এছাড়াও আপনি কোন কেস স্টাইলটি ব্যবহার করছেন তা পরিষ্কার নয় । strlength1- কোন স্টাইল, whole_str- সাপের কেস
বরিস

1

জাভাস্ক্রিপ্ট ব্যবহার করে দুটি চরিত্রের মধ্যে সাবস্ট্রিং পাওয়ার চেষ্টা করুন।

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

@ থেকে নেওয়া jQuery সহ দুটি অক্ষরের মধ্যে স্ট্রাস্টিং সন্ধান করুন


1

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

আমি তৈরি একটি ছোট ফাংশন যা এর মধ্যে স্ট্রিংটি ধরে ফেলতে পারে এবং একটি নির্দিষ্ট সূচকটি ধরতে বেশিরভাগ মিলিত শব্দগুলি এড়িয়ে যেতে পারে (.চ্ছিকভাবে)।

এছাড়াও, সেটিং startকরতে falseস্ট্রিংয়ের শুরু ব্যবহার করবে, এবং সেটিং endকরতে falseস্ট্রিংয়ের শেষ প্রান্ত ব্যবহার করবে।

আপনি pos1যে startপাঠ্যটি ব্যবহার করতে চান তার অবস্থানটিতে সেট করুন , 1এর প্রথম উপস্থিতিটি ব্যবহার করবেstart

pos2যেমনটি একই কাজ করে pos1তবে এর জন্য endএবং কেবল তার পরে 1প্রথম ঘটনাটি ব্যবহার করবে , আগের ঘটনাগুলি উপেক্ষা করা হবে।endstartendstart

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;
}

1

এটি সম্ভাব্য সমাধান হতে পারে

var str = 'RACK NO:Stock;PRODUCT TYPE:Stock Sale;PART N0:0035719061;INDEX NO:21A627 042;PART NAME:SPRING;';  
var newstr = str.split(':')[1].split(';')[0]; // return value as 'Stock'

console.log('stringvalue',newstr)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.