Sử dụng RegExp để thay thế các biểu thức thành kết quả bằng JavaScript? | Replace with evaluated expression involving tagged expressions in JavaScript?

Đây là một vấn đề khá hay, được một bạn trên stackoverflow.com nêu ra, vấn đề được đặt ra là ta có một dang biểu thức trong đó vừa có chữ vừa có một biểu thức "{timeOfEffect: 3*24*60*60 }" và kết quả mong muốn sau khi sử dụng RegExp để thay thế và loại bỏ "{timeOfEffect: 259200}".

Nếu theo format này ta có thể dễ dàng xử lý yêu cầu bằng cách tách nó ra làm 2, nhưng vấn đề đặt là ta dùng phương thức thay thế RegExp để giải quyết vấn đề, thì nó sẽ là một vấn đề khá thú vị để suy nghĩ.

Dưới đây là một giải pháp được đưa ra, bạn có thể xem demo tại http://jsfiddle.net/2gd46/.
var str = '{timeOfEffect: 3s*24*60*60}, {timeOfEffect: 1+7}, {timeOfEffect: 20-3}, {timeOfEffect: 3s/0}';

var result = str.replace(/\s([\d\/\*\-\+\s]+?)\}/g, function(all, match) {
    return eval(match) + '}';
});

document.body.innerHTML = result;

Kết Quả:
{timeOfEffect: 3s*24*60*60}, {timeOfEffect:8}, {timeOfEffect:17}, {timeOfEffect: 3s/0}




Source: stackoverflow





No comments:

Post a Comment