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


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.