我有以下文字和图案。
var str = 'Give 13234 "100" "1.2.3.4" %!';
var patt1 = /"(.*?)"/gm;
var result = str.match(patt1);
结果为我提供了带双引号的文本:
"100","1.2.3.4"
是否有任何查询会给我非双引号的文本?
预期结果是:Give 13234 %!
答案 0 :(得分:0)
一种非正则表达式的解决方案是split
遍历"
的字符串并找到偶数项。
var tests = [
'Give 13234 "100" "1.2.3.4" %!',
'"foobar" match',
'match "foobar"'
];
tests.forEach(function(str) {
var result = str.split('"').filter(function(_, i) {
return i % 2 === 0;
});
console.log(str + " -> " + result.join(""));
});
答案 1 :(得分:0)
这是一个正则表达式:
/".*?"|([^"]*)/g
在第1组中,我们正在寻找项目。考虑到此正则表达式将提供隔离的spaces
const regex = /".*?"|([^"]*)/g;
const str = `Give 13234 "100" "1.2.3.4" %!`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
groupIndex === 1 && match && console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
答案 2 :(得分:-1)
您可以使用negated character class .*?
来匹配双引号,后跟0+空格,并将其替换为空字符串,而不是使用非贪婪的量词"[^"]*" *
。
如果您不想与换行符匹配,可以将其添加到字符类"[^\n"]*"
var str = 'Give 13234 "100" "1.2.3.4" %!';
var patt1 = /"[^"]*" */gm;
var result = str.replace(patt1, "");
console.log(result);
答案 3 :(得分:-1)
绝对不能写std::function<void(std::string const &)> f{&myFunc};
callFunction(f, "Hello world");
之类的正则表达式,因为您要匹配任何东西。
我认为这个示例更加简洁:
(.*?)
对于当前情况,我将正则表达式更改为:
var str = 'Give 13234 "100" "1.2.3.4" %!';
str.replace(/\s?"(.*?)"\s?/g,'');