js正则表达式不支持lookbehind如何实现这个?

时间:2017-04-01 13:53:38

标签: javascript regex

a = "1+2-3*4/5+(6+7^2)" 我想获得纯数字,但不包括第二个2。 因为第二个2是指数。这是固定的。我不想要它。 我写了一个正则表达式。 var myRegx = (?<=[\+\-\*\/\(\^])\d+ JS不支持lookbehind。

谁能帮帮我? var r = a.match(yourRegx) 我想要get =&gt; [1,2,3,4,5,6,7]

1 个答案:

答案 0 :(得分:0)

我会把它分成三个独立的功能。首先替换任何指数,第二个从字符串中获取任何数字。最后将所有字符串映射到数字。

&#13;
&#13;
const a = '1+2-3*4/5+(6+7^2)'
const r = a.replace(/\^\d+/g).match(/\d+/g).map(Number)

console.log(r)
&#13;
&#13;
&#13;

如果没有匹配项,则使用match有一个不返回空数组的缺陷,因此如果你的字符串中没有任何数字,上面的代码会抛出错误。如果您需要类型安全和错误处理,您可以使用这样的功能模式。

&#13;
&#13;
const a = '1+2-3*4/5+(6+7^2)'
const b = 'word'

const extractNumbers = x =>
  [x].map(x => x.replace(/\^\d+/g))
     .map(x => x.match(/\d+/g))
     .map(x => x != null ? x.map(Number) : x)
     .pop() 

console.log(extractNumbers(a))
console.log(extractNumbers(b))
&#13;
&#13;
&#13;