जवाबों:
आप यह कोशिश कर सकते हैं
var mySubString = str.substring(
str.lastIndexOf(":") + 1,
str.lastIndexOf(";")
);
आप यह भी आज़मा सकते हैं:
var str = 'one:two;three';
str.split(':').pop().split(';')[0]; // returns 'two'
str.split(':').pop().split(';')[0]
उपयोग करने की तुलना में तेज़ हो सकता है.shift()
उपयोग 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]);
\[(.*?)\]
---> संक्षेप में आपको वर्ग कोष्ठक से बचने की आवश्यकता है, जैसा कि [] regex में वर्ण वर्ग को दर्शाता है।
@Babasaheb गोसावी उत्तर एकदम सही है यदि आपके पास सबस्ट्रिंग की एक घटना है (":" और ";")। लेकिन एक बार जब आपके पास कई घटनाएं होती हैं, तो यह थोड़ा मुश्किल हो सकता है।
सबसे अच्छा समाधान मैं कई परियोजनाओं पर काम करने के लिए आया हूं, एक वस्तु के अंदर चार तरीकों का उपयोग कर रहा हूं।
इतनी बात करते हुए, आइए देखें कोड:
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
अपवाद हो रही है।
मुझे यह तरीका पसंद है:
var str = 'MyLongString:StringIWant;';
var tmpStr = str.match(":(.*);");
var newStr = tmpStr[1];
//newStr now contains 'StringIWant'
मैंने @tsds का उपयोग किया लेकिन केवल विभाजित फ़ंक्शन का उपयोग करके।
var str = 'one:two;three';
str.split(':')[1].split(';')[0] // returns 'two'
सतर्कता का शब्द: अगर थ्रे नहीं है: "" स्ट्रिंग के एक्सेसिंग '1' इंडेक्स में, एरर फेकेंगे! str.split ( ':') [1]
इसलिए @tsds रास्ता सुरक्षित है अगर अनिश्चितता है
str.split(':').pop().split(';')[0]
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
आप अपने एक्सट्रैक्टर के 'संकलित' संस्करण को वापस करने के लिए एक उच्च क्रम फ़ंक्शन का उपयोग कर सकते हैं, इस तरह यह तेज़ है।
रेगेक्स के साथ, और एक बार बंद होने के दौरान रेक्स को संकलित करने के साथ, जावास्क्रिप्ट का मैच सभी मैचों को वापस कर देगा।
यह हमें केवल हमारे मार्कर (यानी:) के रूप में उपयोग किए गए को हटाने के लिए छोड़ देता है {{
और हम स्लाइस के साथ इसके लिए स्ट्रिंग लंबाई का उपयोग कर सकते हैं।
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
फ़ंक्शन को भी देखें लेकिन प्रतिस्थापन तर्क के लिए एक फ़ंक्शन का उपयोग करना (आप ऐसा करेंगे कि यदि आप उदाहरण के लिए एक मिनी टेम्पलेट इंजन (स्ट्रिंग इंटरपोलेशन) कर रहे थे ... lodash.get भी मददगार हो सकता है तो उन मूल्यों को प्राप्त करने के लिए जिन्हें आप चाहते हैं। से बदलो ? ...
मेरा जवाब बहुत लंबा है लेकिन यह किसी की मदद कर सकता है!
आप भी इस एक का उपयोग कर सकते हैं ...
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");
// " - 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,'"')">Click</button>
</div>
</div>
सबस्ट्रिंग के बीच स्ट्रिंग प्राप्त करें (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()
तो यह उन तार के पहले घटनाओं के लिए जाँच करेगा
जावास्क्रिप्ट का उपयोग करके दो वर्णों के बीच प्रतिस्थापित करने की कोशिश करें।
$("button").click(function(){
var myStr = "MyLongString:StringIWant;";
var subStr = myStr.match(":(.*);");
alert(subStr[1]);
});
@ से लिया गया jQuery के साथ दो वर्णों के बीच प्रतिस्थापन खोजें
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
एक छोटा सा फ़ंक्शन जो मैंने बनाया, वह स्ट्रिंग को बीच में पकड़ सकता है, और (वैकल्पिक रूप से) एक विशिष्ट इंडेक्स को हथियाने के लिए कई मिलान किए गए शब्दों को छोड़ सकता है।
इसके अलावा, की स्थापना start
करने के लिए false
स्ट्रिंग की शुरुआत का उपयोग करेगा, और स्थापित करने end
के लिए false
स्ट्रिंग के अंत का उपयोग करेगा।
pos1
उस start
पाठ की स्थिति पर सेट करें जिसका आप उपयोग करना चाहते हैं, 1
की पहली घटना का उपयोग करेंगेstart
pos2
के रूप में एक ही बात करता है pos1
, लेकिन के लिए end
, और 1
की पहली आवृत्ति का उपयोग करेगा end
के बाद ही 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;
}