JS 获取一个字符串经过几次表达式替换
JS get a string to go through expressions replacement a few times
我想要一种通过不同的正则表达式和不同的替换来获得 text/string 的方法
我可以在 php 中轻松做到这一点:
$pattern[] = "regex"; $replacement[] = "replace string";
$pattern[] = "regex"; $replacement[] = "replace string";
$pattern[] = "regex"; $replacement[] = "replace string";
$pattern[] = "regex"; $replacement[] = "replace string";
echo preg_replace($pattern,$replacement,$string);
我还在学习 javascript,我想 .replace()
但是有没有办法做一个表达式数组?在结束时重复 .replace()
不是技术性的。特别是如果它是一个很大的表达式列表。
preg_replace
独立运行每个模式,因此一个模式适用于先前替换的结果。
function emulate_preg_replace(regexes, replacements, text) {
if (typeof regexes === "string" || typeof regexes.length !== "number") {
// Single pattern
regexes = [regexes];
}
var count = regexes.length;
if (typeof replacements === "string" || typeof replacements.length !== "number") {
// Single replacement
var singleReplacement = replacements;
replacements = [];
for (var i = 0; i < count; i++) {
replacements.push(singleReplacement);
}
}
for (var i = 0; i < count; i++) {
text = text.replace(regexes[i], replacements[i]);
}
return text;
}
alert(emulate_preg_replace([/c+/g, /b+/g], ["b", "a"], "bbbcccbbb")); // displays "a"
这应该适合你。
要求两个数组的元素个数相同
function REArray(contents,sArray,rArray) {
if(sArray.length == rArray.length) {
for(i=0;i<sArray.length;i++) {
rx_this = new RegExp(sArray[i],"g");
contents = contents.replace(rx_this,rArray[i]);
}
}
return contents;
}
var sx = ["cat","best","\d"];
var rx = ["dog","worst","7"];
console.log(REArray("My cat is the best. He is 3.",sx,rx));
在 javascript 中的变量中存储正则表达式时,您必须转义反斜杠。 (\w
变为 \w
,\[b\]
变为 \[b\]
,等等)。阅读起来可能会非常头疼。 (匹配转义斜杠 \
看起来像 \\
)。
有些人喜欢在他们的正则表达式中使用 /
并使用替换将它们转换为 \
。
像这样
var rx_this;
function REArray(contents,sArray,rArray) {
if(sArray.length == rArray.length) {
for(i=0;i<sArray.length;i++) {
rx_this = sArray[i].replace(/\//g,"\");
rx_this = new RegExp(rx_this,"g");
contents = contents.replace(rx_this,rArray[i]);
}
}
return contents;
}
var sx = ["cat","best/.","[3]"];
var rx = ["dog","worst","7"];
console.log(REArray("My cat is the best. He is 3.",sx,rx));
我想要一种通过不同的正则表达式和不同的替换来获得 text/string 的方法
我可以在 php 中轻松做到这一点:
$pattern[] = "regex"; $replacement[] = "replace string";
$pattern[] = "regex"; $replacement[] = "replace string";
$pattern[] = "regex"; $replacement[] = "replace string";
$pattern[] = "regex"; $replacement[] = "replace string";
echo preg_replace($pattern,$replacement,$string);
我还在学习 javascript,我想 .replace()
但是有没有办法做一个表达式数组?在结束时重复 .replace()
不是技术性的。特别是如果它是一个很大的表达式列表。
preg_replace
独立运行每个模式,因此一个模式适用于先前替换的结果。
function emulate_preg_replace(regexes, replacements, text) {
if (typeof regexes === "string" || typeof regexes.length !== "number") {
// Single pattern
regexes = [regexes];
}
var count = regexes.length;
if (typeof replacements === "string" || typeof replacements.length !== "number") {
// Single replacement
var singleReplacement = replacements;
replacements = [];
for (var i = 0; i < count; i++) {
replacements.push(singleReplacement);
}
}
for (var i = 0; i < count; i++) {
text = text.replace(regexes[i], replacements[i]);
}
return text;
}
alert(emulate_preg_replace([/c+/g, /b+/g], ["b", "a"], "bbbcccbbb")); // displays "a"
这应该适合你。
要求两个数组的元素个数相同
function REArray(contents,sArray,rArray) {
if(sArray.length == rArray.length) {
for(i=0;i<sArray.length;i++) {
rx_this = new RegExp(sArray[i],"g");
contents = contents.replace(rx_this,rArray[i]);
}
}
return contents;
}
var sx = ["cat","best","\d"];
var rx = ["dog","worst","7"];
console.log(REArray("My cat is the best. He is 3.",sx,rx));
在 javascript 中的变量中存储正则表达式时,您必须转义反斜杠。 (\w
变为 \w
,\[b\]
变为 \[b\]
,等等)。阅读起来可能会非常头疼。 (匹配转义斜杠 \
看起来像 \\
)。
有些人喜欢在他们的正则表达式中使用 /
并使用替换将它们转换为 \
。
像这样
var rx_this;
function REArray(contents,sArray,rArray) {
if(sArray.length == rArray.length) {
for(i=0;i<sArray.length;i++) {
rx_this = sArray[i].replace(/\//g,"\");
rx_this = new RegExp(rx_this,"g");
contents = contents.replace(rx_this,rArray[i]);
}
}
return contents;
}
var sx = ["cat","best/.","[3]"];
var rx = ["dog","worst","7"];
console.log(REArray("My cat is the best. He is 3.",sx,rx));