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]
答案 0 :(得分:0)
我会把它分成三个独立的功能。首先替换任何指数,第二个从字符串中获取任何数字。最后将所有字符串映射到数字。
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;
如果没有匹配项,则使用match有一个不返回空数组的缺陷,因此如果你的字符串中没有任何数字,上面的代码会抛出错误。如果您需要类型安全和错误处理,您可以使用这样的功能模式。
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;