मैं जावास्क्रिप्ट में एक रेगेक्स सबस्ट्रिंग मैच को कैसे बदल सकता हूं?


111
var str   = 'asd-0.testing';
var regex = /asd-(\d)\.\w+/;

str.replace(regex, 1);

जो पूरे स्ट्रिंग strको बदल देता है 1। मैं चाहता हूं कि यह पूरे स्ट्रिंग के बजाय मिलान किए गए प्रतिस्थापन को बदल दे। क्या यह जावास्क्रिप्ट में संभव है?

जवाबों:


140
var str   = 'asd-0.testing';
var regex = /(asd-)\d(\.\w+)/;
str = str.replace(regex, "$11$2");
console.log(str);

या यदि आप सुनिश्चित हैं कि स्ट्रिंग में कोई अन्य अंक नहीं होंगे:

var str   = 'asd-0.testing';
var regex = /\d/;
str = str.replace(regex, "1");
console.log(str);

1
या फ़ंक्शन का उपयोग कर रहे हैं: 'asd-0.testing'.replace (/ (asd -) \ d (\ _ \ _ w +) /, फ़ंक्शन (रहस्य, arg1, arg2) {वापसी arg1 +' mynumber + + arg2})
— इवान रव

1
क्या कोई जवाब है जहाँ आप रेगेक्स की संरचना को नहीं जानते हैं? यहां आप मूल रूप से दो मैचों के साथ एक नया रेगेक्स बना रहे हैं
— मार्टिन मैसरा

यह जानना अच्छा है कि आपको उस हिस्से के चारों ओर ब्रेसिज़ () की आवश्यकता है जो आप $ 1, $ 2 आदि के रूप में चाहते हैं
— Bas Slagter

57

का उपयोग कर str.replace(regex, $1);:

var str   = 'asd-0.testing';
var regex = /(asd-)\d(\.\w+)/;

if (str.match(regex)) {
    str = str.replace(regex, "$1" + "1" + "$2");
}

संपादित करें: टिप्पणी के संबंध में अनुकूलन


मैं '1' के साथ-स्ट्रिंग नहीं सबस्ट्रिंग साथ पूरी स्ट्रिंग बदलना चाहते हैं
— डेव

24

मुझे इससे पहले और बाद में वह हिस्सा मिलेगा, जिसे आप बदलना चाहते हैं और उन्हें दोनों तरफ रख देंगे।

पसंद:

var str   = 'asd-0.testing';
var regex = /(asd-)\d(\.\w+)/;

var matches = str.match(regex);

var result = matches[1] + "1" + matches[2];

// With ES6:
var result = `${matches[1]}1${matches[2]}`;

5
+1 मुझे व्यक्तिगत रूप से मेल खाने का संग्रह पसंद है।
— eduncan911

मैं सहमत हूं, मिलान सेट उपलब्ध होने से मेरी राय में अधिक पठनीय है।
— ट्रैविस जे

0

मुझे लगता है कि अपने लक्ष्य को प्राप्त करने का सबसे सरल तरीका यह है:

var str   = 'asd-0.testing';
var regex = /(asd-)(\d)(\.\w+)/;
var anyNumber = 1;
var res = str.replace(regex, `$1${anyNumber}$3`);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.