如何编写正则表达式以获取不带双引号的文本?

时间:2019-05-05 12:42:00

标签: javascript regex regex-negation

我有以下文字和图案。

var str = 'Give 13234 "100" "1.2.3.4"  %!'; 
var patt1 = /"(.*?)"/gm;
var result = str.match(patt1);

结果为我提供了带双引号的文本: "100","1.2.3.4"

是否有任何查询会给我非双引号的文本?

预期结果是:Give 13234 %!

4 个答案:

答案 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,'');