2009-08-19 14 views
6

जावास्क्रिप्ट में मेरे पास एक DOM खंड वाला स्ट्रिंग है। मैं छवि के स्रोत विशेषता को कैसे ढूंढूं और प्रतिस्थापित करूं?जावास्क्रिप्ट में नियमित अभिव्यक्ति - बदलें छवि स्रोत विशेषता

मैं सभी छवियों के पथ को नए पथ से बदलना चाहता हूं लेकिन छवि का नाम रखना चाहता हूं। सभी पथ समान नहीं हैं और विभिन्न स्थानों से आ सकते हैं। मेरा नियमित अभिव्यक्ति कौशल सबसे अच्छा है।

उदाहरण के लिए:

Change 

    <img src='path/to/image/name.jpg' /> 

into 

    <img src='newPath/name.jpg' /> 

उत्तर

7

इस प्रयास करें:

str.replace(/src='(?:[^'\/]*\/)*([^']+)'/g, "src='newPath/$1'"); 
+0

काम नहीं कर रहा है। बदलते हैं http://blog.internetnews.com/skerner/smk/testpilot.png ' ' http: //newPath/blog.internetnews.com/skerner/smk/testpilot.png ' – redsquare

+0

यह करेगा। आपको प्रतिस्थापन – Xetius

+0

प्रतिस्थापन के रूप में "src = 'newPath/$ 2'" का उपयोग करने की आवश्यकता है, ऐसा लगता है कि चाल चलती है, चीयर्स Xetius – redsquare

1
replace(/(.*)\/(.*)/, "newPath/$2"); 
+0

इसे काम करने के लिए नहीं मिल सकता है, यह "newPath />" – redsquare

+0

के साथ समाप्त होता है जो अजीब है। जब मैंने इसमें कोशिश की तो यह काम करता है: http://www.regular-expressions.info/javascriptexample।एचटीएमएल – Xetius

+0

देखें http://pastebin.me/95775a662ddb4f79da1f7beaa1d4749b – redsquare

9

gumbo के जवाब लिया और इसे सुधारने के लिए कुछ और कार्य कहा:

  • इनपुट हैं स्ट्रिंग मेंशामिल है <img> टैग्स के अलावा src विशेषता हो सकती है - यह अब मैचों/प्रतिस्थापित नहीं करेगा।

  • src विशेषता एकल या दोहरे उद्धरणों का उपयोग कर हो सकती है।

  • परीक्षण केस असंवेदनशील है।

में परिणामी:

string.replace(/<img([^>]*)\ssrc=(['"])(?:[^\2\/]*\/)*([^\2]+)\2/gi, "<img$1 src=$2newPath/$3$2"); 
+0

चीयर्स gnarf। – redsquare

1

तो स्ट्रिंग के रूप में इस तरह के HTML के रूप में कच्चे (गैर डोम) डेटा का उपयोग कर, ऊपर दोहरे उद्धरण वर्ण से मेल नहीं खाता। इस कोड को उपयोगी भी साबित हो सकता है:

root  = serviceURL("file") + "&src=" + encodeURIComponent(root); 
// html itself 
html  = html.replace(/src=['"](?:[^"'\/]*\/)*([^'"]+)['"]/g, "src='" + root + "/$1'"); 
+0

बहुत बेहतर समाधान –

0

ऊपर समाधान मेरे मामले में अच्छी तरह से काम नहीं करता है, जहां मैं डीबी में भंडारण से पहले निरपेक्ष पथ के लिए सभी रिश्तेदार पथ को बदलने के लिए किया था। लेकिन अगर मेरा काम किसी और के लिए काम करता है तो मेरा समाधान यहां है। चीयर्स।

replace(/<img([^>]*)\ssrc=(['"])(\/[^\2*([^\2\s<]+)\2/gi, "<img$1 src=$2" + BaseURL + "$3$2"); 
0

मैं अपने प्रोजेक्ट में इन अभिव्यक्ति इस्तेमाल किया आकर्षण की तरह काम किया, जैसे, बोली, दोहरे उद्धरण, पाठ आदि में कई छवि टैग सभी मामलों से निपटने जावास्क्रिप्ट में

text.replace(/\<img([^>]*)\ssrc=('|")([^>]*)\2\s([^>]*)\/\>/gi, "<img$1 src=$2newPath/$3$2 $4/>"); 

पीएचपी

में
preg_replace('/\<img([^>]*)\ssrc=(\'|\")([^>]*)\2\s([^>]*)\/\>/', "<img$1 src=$2newPath/$3$2 $4/>",$text); 
संबंधित मुद्दे