由于模式是字符串,正则表达式不起作用

时间:2017-08-16 06:15:06

标签: javascript jquery regex

我正在使用一个框架,在框架工作中mat的正则表达式就像这个var regex = "/^0(9|4)\d{8}$/";这样的字符串当我尝试工作时我无法处理这个字符串有什么方法可以转换为正常的RegEx https://plnkr.co/edit/Yjch7G7npkHmtKYDF5Yc?p=preview

当我尝试使用这个新的RegExp将我的表达式从此更改为

/^0(9|4)d{8}$/

/\/^0(9|4)d{8}$\//

因为这次转化

new RegExp($(element).attr("data-regex")); = /\/^0(9|4)d{8}$\//

4 个答案:

答案 0 :(得分:0)

阅读完代码后,我认为这应该为您展示解决方案的核心



function strToRegExp(str) {
  var split = str.split('/');
  var flags = split.pop();
  var discard = split.shift();
  return new RegExp(split.join('/'), flags);
}
document.querySelectorAll('.test').forEach(div => 
  console.log(strToRegExp(div.textContent).test('0912345678'))
);

<div class='test'>/(09|04)\d{8}/g</div>
<div class='test'>/^0(9|4)\d{8}$/</div>
&#13;
&#13;
&#13;

您在评论中提到了数据属性

因此,这会稍微改变代码

&#13;
&#13;
function strToRegExp(str) {
  var split = str.split('/');
  var flags = split.pop();
  var discard = split.shift();
  return new RegExp(split.join('/'), flags);
}
document.querySelectorAll('.test').forEach(div => 
  console.log(strToRegExp(div.dataset.regexp).test('0912345678'))
);
&#13;
    <div class='test' data-regexp='/(09|04)\d{8}/g'>Test 1</div>
    <div class='test' data-regexp='/^0(9|4)\d{8}$/'>Test 2</div>
&#13;
&#13;
&#13;

  

现在我只看了一下plunkr javaascript FFS !!

var regex =new RegExp("/^0(9|4)\d{8}$/");
var regex2 = new RegExp("/(09|04)\d{8}/g");

应该是

var regex = new RegExp("^0(9|4)\\d{8}$");
var regex2 = new RegExp("(09|04)\\d{8}", "g");

甚至

var regex = /^0(9|4)\d{8}$/;
var regex2 = /(09|04)\d{8}/g;

答案 1 :(得分:0)

您可以使用The RegExp constructor,然后使用.test()方法

var regex = "/^0(9|4)\d{8}$/";
regex = regex.substring(1, regex.length-1);
console.log(regex);
var patt = new RegExp(regex, "g");
var res = patt.test("04dddddddd");
console.log(res);

答案 2 :(得分:0)

尝试删除双引号并替换为html编码字符。这样JavaScript就不会使用双引号作为其语言解释的一部分。

尝试使用ascii值&#34;“或者您可以使用&quot;

答案 3 :(得分:-1)

摆脱"和 你的表达应该是这样的

var regex =new RegExp(/^0(9|4)\d{8}$/);
var regex2 = new RegExp(/(09|04)\d{8}/g);