javascript - 正则表达式替换为关联数组(正则表达式模式)

标签 javascript arrays regex

本质上,此代码会搜索字符串,根据每个正则表达式模式进行查找和替换,然后再将更新后的变量返回。

我在将 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 错误,它只是返回字符串..未更改。

最佳答案

对象的键应该是字符串,因此我建议您使用对象数组来节省精力和周期。 em>,即

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
*/

关于javascript - 正则表达式替换为关联数组(正则表达式模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23116113/

相关文章:

c - 理解指向赋值 C

arrays - 在matlab中查找数组中遵循某个值的元素

c - 如何将二维字符串数组分配给字符指针数组?

python - 如何在 Python 中用空字符串替换引号“和连字符?

javascript - 如何在 AngularJS 组件中定义新变量

javascript - 在 dom 中为 Angular 播种数据的正确方法是什么

javascript - 如何在javascript中调用java方法

javascript - 绑定(bind)到 ItemView 的变化事件

javascript - 快速正则表达式和JavaScript查询

regex - Haskell 在一次传递中用正则表达式替换多个子字符串