regex替换为(regex模式的)关联数组
regex replace with associative array (of regex patterns)
本质上,这段代码搜索字符串,根据这些正则表达式模式中的每一个进行查找和替换,然后将更新后的变量吐回。
我很难将它从PHP代码翻译成Javascript:
在PHP中,我已经做到了:
$dataPreg = array(
'/(.*)'s§/' => '$1 <span class="suppSmall">quasi</span>',
'/('bor|and'b)/'=>'<span class="orChar">$1</span>',
'/':('s*see[':]?)/'=>'<span class="orChar"> $1: </span>'
);
$root = preg_replace(array_keys($dataPreg),array_values($dataPreg),$root);
return $root;
在Javascript中,我试图将其移植为:
var dataPreg = {
'/(.*)'s§/':'$1 <span class="suppSmall">quasi</span>',
'/('bor|and'b)/':'<span class="orChar">$1</span>',
'/':('s*see[':]?)/':'<span class="orChar"> $1: </span>'
};
for (var val in dataPreg)
$string = $string.replace(new RegExp(val, "g"), dataPreg[val]);
return $string;
不用说,它在Javascript中不起作用,我不知道为什么。它不会触发任何JS错误,只是返回字符串。。不变。
对象的键应该是字符串,所以我建议您使用的数组来节省工作量和周期,即
var dataPreg = [
{re: /(.*)'s§/g , sub: '$1 <span class="suppSmall">quasi</span>'},
{re: /('bor|and'b)/g , sub: '<span class="orChar">$1</span>'},
{re: /':('s*see[':]?)/g, sub: '<span class="orChar"> $1: </span>'}
];
然后
(function () {
var i; // don't pollute namespace ;)
for (i = 0; i < dataPreg.length; ++i)
$string = $string.replace(dataPreg[i].re, dataPreg[i].sub);
}());
例如
var $string = 'foo § bar or then and you :see: here';
/* becomes
foo <span class="suppSmall">quasi</span> bar <span class="orChar">or</span> then <span class="orChar">and</span> you <span class="orChar"> see:: </span> here
*/
RegExp
将模式作为参数,不带分隔符。例如,它使用[a-z]+
作为参数,而不是像在PHP中那样使用/[a-z]+/
。因此,从正则表达式的两端删除//
分隔符。一个例子:
'(.*)'s§':'$1 <span class="suppSmall">quasi</span>',
^ the / is gone
您的数组字符串不适合创建new RegExp
对象。(使用分隔符和单个转义属性,例如's
而不是''s
)。
试试这个:
dataPreg = {
'/(.*)''s§/g':'$1 <span class="suppSmall">quasi</span>',
'/(''bor|and''b)/g':'<span class="orChar">$1</span>',
'/:(''s*see:?)/g':'<span class="orChar"> $1: </span>'
};
for (var val in dataPreg)
$string = $string.replace(val, dataPreg[val]);
return $string;
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- Regex代码只允许一个空格
- Regex匹配除“”之外的所有字符;.js”;
- RegExp:匹配Javascript中除regex值之外的所有内容
- Javascript RegEx validator
- 使用regex的jquery keydown绑定不会验证撇号和句点
- 制作一个regex来验证只有一个数字的字符串
- RegEx JavaScript:数字后的符号提取
- PHP和Javascript之间的Regex差异
- 链接和youtube的Javascript和regex
- 包含圆括号的JavaScript Regex模式
- 相当复杂的Regex
- 如何在ng regex中包含qutoes+双引号
- 在javascript中,I'我很难弄清楚如何让regex只替换捕获而不替换匹配
- Regex提取URL返回数组的一部分;未定义”;
- 将po-box javascript正则表达式转换为c#regex
- Datatables查询url字符串:需要regex来修复url解析
- 要替换的Javascript Regex无法按预期工作
- 如果匹配项在特定的html标记中,则跳过regex匹配
- regex替换为(regex模式的)关联数组