रेगेक्स के साथ फॉरवर्ड स्लैश का मिलान करना


90

मुझे जावास्क्रिप्ट के साथ बहुत अनुभव नहीं है, लेकिन मैं एक टैग प्रणाली बनाने की कोशिश कर रहा हूं, जो उपयोग करने के बजाय @या का उपयोग #करेगा /

var start = /#/ig; // @ Match

var word = /#(\w+)/ig; //@abc Match

के /बजाय मैं कैसे उपयोग कर सकते हैं #? मैंने करने var slash = '/'और जोड़ने की कोशिश की है + slash +, लेकिन वह विफल रहा।


1
कृपया शीर्षक बदलें। और आप वास्तव में क्या करने की कोशिश कर रहे हैं? आपके प्रश्न को पढ़ने के बाद भी मुझे कुछ पता नहीं है।
ऑप्टिमसक्राइम

मुझे यकीन नहीं कि मैं समझा हूँ।
जॉन स्ट्राइकर

जवाबों:


123

आप इसे इस तरह से बच सकते हैं।

/\//ig; //  Matches /

या सिर्फ indexOf का उपयोग करें

if(str.indexOf("/") > -1)

धन्यवाद बेन, मैंने कोशिश की है कि के रूप में अच्छी तरह से, लेकिन मैं अंत में एक और \ जोड़ा।
ब्राज़ीलियन 2

21

आप /एक साथ भागने की जरूरत है \

/\//ig // matches /

6

यदि आप उपयोग करना चाहते हैं तो आपको /इसके साथ बच निकलने की आवश्यकता है\

var word = /\/(\w+)/ig;

6

नियमित अभिव्यक्तियों में, "/" एक विशेष चरित्र है जिसे बचाना पड़ता है (AKA को ध्वजांकित किया जाता है, इससे पहले कि यह किसी विशेष कार्य को अनदेखा कर सकता है)।

यहाँ आपको क्या चाहिए:

var word = /\/(\w+)/ig; //   /abc Match

RegEx के विशेष पात्रों पर यहां पढ़ें: http : //www . अनियमित-expressions.info/characters.html


17
"" "नियमित अभिव्यक्तियों में एक विशेष चरित्र नहीं है। हालांकि यह जावास्क्रिप्ट में एक विशेष चरित्र है जो परिसीमन करता है जहां रेगेक्स शुरू होता है और समाप्त होता है।
sokkyoku

5

आप किसी वर्ण समूह में इसे शामिल करके फॉरवर्ड स्लैश के विशेष जेएस हैंडलिंग के आसपास भी काम कर सकते हैं, जैसे:

const start = /[/]/g;
"/dev/null".match(start)     // => ["/", "/"]

const word = /[/](\w+)/ig;
"/dev/null".match(word)      // => ["/dev", "/null"]

2
+1, बचने से बचने के लिए सेट किए गए वर्ण का उपयोग करने से RegEx एक वर्ण अधिक लंबा हो जाता है, लेकिन यह पठनीयता के लिए इसके लायक है: /[/]/नेत्रहीन अनुगामी सीमांकक को स्पष्ट रूप से भिन्न करता है /\//
डेम पिलाफियन

2
/[/]/पढ़ना आसान है और काम करता है, लेकिन दुर्भाग्य से, कुछ RegEx सत्यापनकर्ता रिपोर्ट करेंगे " एक चरित्र समूह के भीतर भी एक अनिर्धारित सीमांकक को बैकस्लैश से बच जाना चाहिए" । तो, मैं बदसूरत /\//रूप में वापस आ गया हूं ।
डेम पिलाफियन

3

आप एक साथ यह पूर्ववर्ती से यह बच सकते हैं \(यह कर रही है \/), या आप इस्तेमाल कर सकते हैं new RegExp('/')करने के लिए रेगुलर एक्सप्रेशन से बचने से बचने के

JSFiddle में उदाहरण देखें ।

'/'.match(/\//)            // matches /
'/'.match(new RegExp('/')  // matches /

1

मेरे लिए, मैं /C # में एक तारीख को मैच करने की कोशिश कर रहा था । मैंने इसे केवल उपयोग करके किया (\/):

string pattern = "([0-9])([0-9])?(\/)([0-9])([0-9])?(\/)(\d{4})";
string text = "Start Date: 4/1/2018";

Match m = Regex.Match(text, pattern);

if (m.Success) 
{ 
    Console.WriteLine(match.Groups[0].Value);  // 4/1/2018
}
else
{
    Console.WriteLine("Not Found!");
}

जावास्क्रिप्ट को भी इसी तरह उपयोग करने में सक्षम होना चाहिए (\/)


डाउनवॉटर, समझाने की परवाह? यह काम करता है और मैंने यह साबित कर दिया है कि इसका परीक्षण करके।
vapcguy

1
मुझे लगता है कि यह एक दुर्घटना थी, क्षमा करें। मैंने इसे पूर्ववत करने की कोशिश की, लेकिन यह कहता है कि जब तक जवाब संपादित नहीं किया जाता, तब तक मेरा वोट बंद है। केवल एक चीज मैं देख रहा हूं कि आपके पास उन समूहों को कैप्चर करने का एक लॉग है, जिनका आप उपयोग नहीं करते हैं। किसी भी कारण से सब कुछ कोष्ठक में है?
रयान क्विन

1
@RyanQuinn स्पष्टीकरण के लिए धन्यवाद। मैं एक विशेष अंक का प्रतिनिधित्व करने के लिए एक साथ समूह चीजों का उपयोग करता था, जिसकी मुझे उम्मीद थी। यह भी उन्हें एक साइट पर मैं इसे बाहर का परीक्षण करने के लिए उपयोग कर रहा था की आवश्यकता लग रही थी: regexr.com मैंने अपनी पोस्ट को संपादित किया (बस अंत में एक स्थान जोड़ा गया), इसलिए यदि आप चाहें तो डाउनवोट को हटाने में सक्षम होना चाहिए।
vapcguy

0

जब निकाल कर सीमांकित पाठ मैं पूर्वगामी से संबंधित दो मुद्दों का सामना करना पड़ा \और /, और एक समाधान में पाया गया कि फिट दोनों, का उपयोग कर के अलावा अन्य new RegExpहै, जो की आवश्यकता है \\\\शुरू में। ये निष्कर्ष क्रोम और IE11 में हैं।

नियमित अभिव्यक्ति

/\\(.*)\//g

काम नहीं करता। मुझे लगता //है कि पलायन चरित्र के बावजूद एक टिप्पणी की शुरुआत के रूप में व्याख्या की गई है। नियमित अभिव्यक्ति (मेरे मामले में समान रूप से मान्य हालांकि सामान्य रूप में नहीं)

/\b/\\(.*)\/\b/g

काम भी नहीं करता है। मुझे लगता है कि दूसरा /बच चरित्र के बावजूद नियमित अभिव्यक्ति को समाप्त करता है।

मेरे लिए क्या काम करता है, इसका प्रतिनिधित्व करना /है \x2F, जो कि हेक्साडेसिमल प्रतिनिधित्व है /। मुझे लगता है कि new RegExpयह उपयोग करने की तुलना में अधिक कुशल और समझने योग्य है , लेकिन निश्चित रूप से इसे हेक्स कोड की पहचान करने के लिए एक टिप्पणी की आवश्यकता है।


0

फॉरवर्ड स्लैश विशेष चरित्र है, इसलिए आपको इसे काम करने के लिए फ़ॉरवर्ड स्लैश से पहले बैकस्लैश जोड़ना होगा

$patterm = "/[0-9]{2}+(?:-|.|\/)+[a-zA-Z]{3}+(?:-|.|\/)+[0-9]{4}/";

जहां / इस तरह से आप के लिए / का प्रतिनिधित्व करता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.