diff --git a/lib/message-extractor.js b/lib/message-extractor.js
index 3325ff6..d7c5201 100644
--- a/lib/message-extractor.js
+++ b/lib/message-extractor.js
@@ -22,9 +22,11 @@ module.exports = (rules, originalMessage, isDebug) => {
         const rule = rules[i];
 
         // eslint-disable-next-line no-continue
-        if (rule.disable || rule.disabled) continue;
+        if (!rule || !rule.pattern || rule.disable || rule.disabled) continue;
 
-        const re = new RegExp(rule.pattern, rule.flags || '');
+        const patternConstructorName = rule.pattern.constructor.name;
+        const re = patternConstructorName === 'RegExp' ? rule.pattern
+            : new RegExp(rule.pattern, rule.flags || '');
 
         const matches = msg.match(re);
         let result = matches && matches[rule.idx];
diff --git a/lib/pattern-rules.js b/lib/pattern-rules.js
index 8e14a5c..f8a5233 100644
--- a/lib/pattern-rules.js
+++ b/lib/pattern-rules.js
@@ -4,14 +4,14 @@
 module.exports = {
     sn: [
         {
-            pattern: '(?:^|,|\\.|;|\\s)SN\\s*[=: ]\\s*(.+?)(?:;|$)',
+            pattern: /(?:^|,|\.|;|\s)SN\s*[=: ]\s*(.+?)(?:;|$)/,
             idx: 1,
             disable: false,
         },
     ],
     price: [
         {
-            pattern: '(?:,|\\.|;|\\s)(?:HRG|HARGA)\\s*[=: ]\\s*(?:RP)*\\s*(([0-9]|\\.||,)+)',
+            pattern: /(?:,|\.|;|\s)(?:HRG|HARGA)\s*[=: ]\s*(?:(?:RP|Rp)\.*)*\s*(([0-9]|\.||,)+)/,
             idx: 1,
             disable: false,
             postprocessing: (val) => (val || '').replace(/[,.]/g, ''),
@@ -19,7 +19,7 @@ module.exports = {
     ],
     balance: [
         {
-            pattern: '(?:,|\\.|;|\\s)SAL(?:DO)*\\s*[=: ]\\s*(?:RP)*\\s*(([0-9]|\\.||,)+)',
+            pattern: /(?:,|\.|;|\s)SAL(?:DO)*\s*[=: ]\s*(?:(?:RP|Rp)\.*)*\s*(([0-9]|\.||,)+)/,
             idx: 1,
             disable: false,
             postprocessing: (val) => (val || '').replace(/[,.]/g, ''),