"funny+gifs-politics+aww".match(/\+(\w+)/gis)

[+gifs, +aww] के साथ रिटर्न ऐरे, जब मैं [gifs, aww] ढूंढ रहा हूं। यह कोई फर्क नहीं पड़ता कि मैंने कोष्ठक कहाँ रखा है।

"funny+gifs-politics+aww".match(/(\+\w+)/gis)

वही परिणाम। मुझे यहां क्या समझ नहीं आ रहा है? धन्यवाद।

1
Harry 9 अगस्त 2020, 06:08

3 जवाब

सबसे बढ़िया उत्तर

खैर, String#match()केवल पूर्ण मिलान तत्व प्रदान करेगा और कोष्ठक केवल कैप्चरिंग समूह बनाएगा, ताकि सभी प्राप्त करने के लिए वे मैच जिनका आपको उपयोग करना चाहिए String.matchAll(), फिर पहचानें कि आप किस कैप्चरिंग ग्रुप की तलाश कर रहे हैं। लेकिन अगर आपके मामले का पैटर्न हमेशा + साइन के रूप में जाना जाता है, तो आप बस String#replace()

console.log("funny+gifs-politics+aww".match(/\+(\w+)/gis).map(item => item.replace('+', '')))

साथ ही जैसा कि टोटो ने पहले कहा था कि आप तत्व का मिलान करने के लिए पॉजिटिव लुकबैक का उपयोग कर सकते हैं, यदि केवल एक विशेष तत्व (जैसे +) इसके पहले मौजूद है।

console.log("funny+gifs-politics+aww".match(/(?<=\+)\w+/gis))
2
SMAKSS 10 अगस्त 2020, 00:21

आप .matchAll() विधि का उपयोग कर सकते हैं, जो मुझे लगता है कि बिल्कुल नई है।

const res = "funny+gifs-politics+aww".matchAll(/\+(\w+)/gis);
const subs = [];

for (const r of res) {
  console.log(r);
  subs.push(r[1]);
}

console.log(subs);

अन्यथा आप लूप में .exec() का उपयोग कर सकते हैं।

const re = /\+(\w+)/gis;
const s = "funny+gifs-politics+aww";
let match = null;
const subs = [];

while((match = re.exec(s))) {
  console.log(match);
  subs.push(match[1]);
}

console.log(subs);
2
slappy 9 अगस्त 2020, 06:19

यह सुनिश्चित करने के लिए कि शब्दों से पहले एक प्लस है लेकिन इसे कैप्चर किए बिना सकारात्मक लुकबैक (?<=\+) का उपयोग करें।

res = "funny+gifs-politics+aww".match(/(?<=\+)\w+/gis);
console.log(res);
2
Toto 9 अगस्त 2020, 11:37