මෙම පිළිතුර සඳහා භාවිතා වන පාරිභාෂිතය:
- තරඟය මඟින් ඔබේ රෙජෙක්ස් රටාව ඔබේ නූලට එරෙහිව ධාවනය කිරීමේ ප්රති result ලය පෙන්නුම් කරයි :
someString.match(regexPattern)
.
- ගැලපෙන රටාවන් ඇතුළත සියලු බලකායේ ආදාන නූල්, සියලු ගැලපෙන කොටස් බවයි තරගය සාධක විය. මේ සියල්ල ආදාන නූල තුළ ඔබේ රටාවේ අවස්ථා වේ.
- ගැලපෙන කණ්ඩායම් විසින් රෙජෙක්ස් රටාවෙන් අර්ථ දක්වා ඇති සියලුම කණ්ඩායම් අල්ලා ගැනීමට දක්වයි. (වරහන් තුළ ඇති රටා, එසේ ය :
/format_(.*?)/g
, (.*?)
ගැලපෙන කණ්ඩායමක් වන්නේ කොතැනද ?) මේවා වාසය කරන්නේ ගැළපෙන රටා තුළ ය .
විස්තර
ගැළපෙන කණ්ඩායම් වෙත ප්රවේශය ලබා ගැනීම සඳහා, ගැලපෙන එක් එක් රටාවන් තුළ , ඔබට ශ්රිතයක් හෝ තරගය පුරා පුනරාවර්තනයට සමාන යමක් අවශ්ය වේ. අනෙක් පිළිතුරු බොහොමයක් පෙන්වන පරිදි ඔබට මෙය කළ හැකි ක්රම ගණනාවක් තිබේ. අනෙකුත් බොහෝ පිළිතුරු ගැලපෙන සියලු රටාවන් නැවත සැකසීමට කාල පුඩුවක් භාවිතා කරයි , නමුත් මම හිතන්නේ අපි සියලු දෙනා එම ප්රවේශය සමඟ ඇති විය හැකි අන්තරායන් දනිමු. new RegExp()
විවරණයක පමණක් සඳහන් කර ඇති රටාව වෙනුවට ආදේශ කිරීම අවශ්ය වේ . මෙයට හේතුව මෙම .exec()
ක්රමය උත්පාදක ශ්රිතයකට සමාන ලෙස ක්රියා කරන බැවිනි - එය ගැලපීමක් ඇති සෑම අවස්ථාවකම එය නතර කරයි , නමුත් .lastIndex
ඊළඟ .exec()
ඇමතුම මත එය එතැනින් ඉදිරියට ගෙන යයි.
කේත උදාහරණ
පහත ශ්රිතයක උදාහරණයක් searchString
ලෙස නැවත වන Array
සියලු ගැලපෙන රටාවන් එක් එක් ස්ථාන, match
යනු Array
සියලු අඩංගු සමග ගැලපෙන කණ්ඩායම් . ටික වේලාවක් භාවිතා කරනවා වෙනුවට, මම Array.prototype.map()
ක්රියාකාරීත්වය මෙන්ම වඩාත් ක්රියාකාරී ක්රමයක් භාවිතා කරමින් උදාහරණ ලබා දී ඇත - තැනිතලාවක් භාවිතා කිරීමfor
ලූප් .
සංක්ෂිප්ත අනුවාදයන් (අඩු කේතය, වැඩි සින්ටැක්ටික් සීනි)
මූලික වශයෙන් forEach
වේගවත්- for
ලූප් වෙනුවට-ලූප් ක්රියාත්මක කරන බැවින් මේවා අඩු ක්රියාකාරී වේ.
// Concise ES6/ES2015 syntax
const searchString =
(string, pattern) =>
string
.match(new RegExp(pattern.source, pattern.flags))
.map(match =>
new RegExp(pattern.source, pattern.flags)
.exec(match));
// Or if you will, with ES5 syntax
function searchString(string, pattern) {
return string
.match(new RegExp(pattern.source, pattern.flags))
.map(match =>
new RegExp(pattern.source, pattern.flags)
.exec(match));
}
let string = "something format_abc",
pattern = /(?:^|\s)format_(.*?)(?:\s|$)/;
let result = searchString(string, pattern);
// [[" format_abc", "abc"], null]
// The trailing `null` disappears if you add the `global` flag
ක්රියාකාරී අනුවාදයන් (වැඩි කේතයක්, අඩු සින්ටැක්ටික් සීනි)
// Performant ES6/ES2015 syntax
const searchString = (string, pattern) => {
let result = [];
const matches = string.match(new RegExp(pattern.source, pattern.flags));
for (let i = 0; i < matches.length; i++) {
result.push(new RegExp(pattern.source, pattern.flags).exec(matches[i]));
}
return result;
};
// Same thing, but with ES5 syntax
function searchString(string, pattern) {
var result = [];
var matches = string.match(new RegExp(pattern.source, pattern.flags));
for (var i = 0; i < matches.length; i++) {
result.push(new RegExp(pattern.source, pattern.flags).exec(matches[i]));
}
return result;
}
let string = "something format_abc",
pattern = /(?:^|\s)format_(.*?)(?:\s|$)/;
let result = searchString(string, pattern);
// [[" format_abc", "abc"], null]
// The trailing `null` disappears if you add the `global` flag
මෙම විකල්පයන් වෙනත් පිළිතුරු වල කලින් සඳහන් කළ ඒවා සමඟ සැසඳිය යුතු නැත, නමුත් මෙම ප්රවේශය අනෙක් කාර්ය සාධනයට වඩා අඩු කාර්ය සාධනයක් සහ අඩු අසාර්ථක-ආරක්ෂිත යැයි මම සැක කරමි.