更新:此问题几乎与this
重复我确信我的问题的答案就在那里,但我找不到简洁明了的话。我正在尝试使用JavaScript正则表达式执行以下操作:
var input = "'Warehouse','Local Release','Local Release DA'";
var regex = /'(.*?)'/g;
console.log(input.match(regex));
// Actual:
// ["'Warehouse'", "'Local Release'", "'Local Release DA'"]
// What I'm looking for (without the '):
// ["Warehouse", "Local Release", "Local Release DA"]
使用JavaScript正则表达式有一种干净的方法吗?显然我可以自己删除'
,但我正在寻找用正则表达式来限制全局匹配分组的正确方法。
答案 0 :(得分:72)
要使用正则表达式执行此操作,您需要使用.exec()
对其进行迭代,以获得多个匹配的组。带匹配的g
标志只返回多个完整匹配,而不是您想要的多个子匹配。这是使用.exec()
进行此操作的方法。
var input = "'Warehouse','Local Release','Local Release DA'";
var regex = /'(.*?)'/g;
var matches, output = [];
while (matches = regex.exec(input)) {
output.push(matches[1]);
}
// result is in output here
工作演示:http://jsfiddle.net/jfriend00/VSczR/
对于字符串中的内容有某些假设,你也可以使用它:
var input = "'Warehouse','Local Release','Local Release DA'";
var output = input.replace(/^'|'$/, "").split("','");
答案 1 :(得分:5)
不是非常通用的解决方案,因为Javascript不支持lookbehind,但对于给定的输入,这个正则表达式应该有效:
m = input.match(/([^',]+)(?=')/g);
//=> ["Warehouse", "Local Release", "Local Release DA"]
答案 2 :(得分:1)
尝试使用input.replace(regex, "$1")
之类的内容来获取捕获组的结果。
答案 3 :(得分:0)
这个正则表达式有效,但有定义的字符...
var input = "'Warehouse','Local Release','Local Release DA'";
var r =/'[\w\s]+'/gi;
console.log(input.match(regex));
答案 4 :(得分:0)
答案 5 :(得分:0)
String.prototype.matchAll
现在是well supported in modern browsers以及Node.js.,可以这样使用:
const matches = Array.from(myString.matchAll(/myRegEx/g)).map(match => match[1]);
请注意,传递的RegExp
必须具有全局标志,否则将引发错误。
方便地,当没有找到匹配项时,这不会引发错误,因为.matchAll
总是返回迭代器(vs .match()
返回null
)。
对于此特定示例:
var input = "'Warehouse','Local Release','Local Release DA'";
var regex = /'(.*?)'/g;
var matches = Array.from(input.matchAll(regex)).map(match => match[1]);
// [ "Warehouse", "Local Release", "Local Release DA" ]
答案 6 :(得分:0)
在 es2020 中,您可以使用 matchAll
:
var input = "'Warehouse','Local Release','Local Release DA'";
var regex = /'(.*?)'/g;
const match_all = [...input.matchAll(regex)];
如果您使用的是 typescript,请不要忘记在 tsconfig.json
中进行设置:
"compilerOptions": {
"lib": ["es2020.string"]
}
答案 7 :(得分:-3)
编辑:这在javascript中不起作用,但它在java中有效。抱歉,那个。
是的,它被称为“向前看”并且“向后看”
(?<=').*?(?=')
测试here