双引号之间的JavaScript文本

Teo*_*Teo 14 javascript regex text substring

我想使用JavaScript在双引号之间获取文本.我在网上找到了类似title.match(/".*?"/);的东西,但有时我的双引号之间有文字,但有时候没有引号.我所说的是,有时我收到的字符串如下:Neque porro quisquam est qui dolorem ipsum有时字符串如下:Neque "porro quisquam est" qui dolorem ipsum.问题是,当我有包含双引号的文本时,我想要检索它们之间的文本,但是当它们不存在时,我想要整个文本.此外,我观察到string.indexOf("\"")这不起作用,我真的不知道如何处理这个问题.谢谢.

got*_*itz 35

尝试:

let str1 = 'Neque porro quisquam est qui dolorem ipsum';
let str2 = 'Neque "porro quisquam est" qui dolorem ipsum';
let str3 = 'Neque "porro';
let str4 = 'Neque "porro" quisquam "est" qui dolorem ipsum';

function extractFirstText(str){
  const matches = str.match(/"(.*?)"/);
  return matches
    ? matches[1]
    : str;
}


function extractAllText(str){
  const re = /"(.*?)"/g;
  const result = [];
  let current;
  while (current = re.exec(str)) {
    result.push(current.pop());
  }
  return result.length > 0
    ? result
    : [str];
}
Run Code Online (Sandbox Code Playgroud)

然后

extractFirstText(str1);
//Neque porro quisquam est qui dolorem ipsum

extractFirstText(str2);
//porro quisquam est

extractText(str3);
//Neque "porro

extractText(str4);
//porro

extractAllText(str1);
//Array [ "Neque porro quisquam est qui dolorem ipsum" ]

extractAllText(str2);
//Array [ "porro quisquam est" ]

extractAllText(str3);
//Array [ "Neque \"porro" ]

extractAllText(str4);
//Array [ "porro", "est" ]
Run Code Online (Sandbox Code Playgroud)

编辑重新编写以考虑关于匹配多个子字符串的丢弃编辑中的@AshishMaity注释,以及@JosephCho关于原始分解的注释,以防有单引号(在上面的情况下为str3)


anu*_*ava 8

在单个正则表达式中:

var m = s.match(/(?:"[^"]*"|^[^"]*$)/)[0].replace(/"/g, "");
Run Code Online (Sandbox Code Playgroud)

测试:

s = 'Neque "porro quisquam est" qui dolorem ipsum';
m = s.match(/(?:"[^"]*"|^[^"]*$)/)[0].replace(/"/g, "");
//=> porro quisquam est

s = 'Neque porro quisquam est qui dolorem ipsum';
m = s.match(/(?:"[^"]*"|^[^"]*$)/)[0].replace(/"/g, "");
//=> Neque porro quisquam est qui dolorem ipsum
Run Code Online (Sandbox Code Playgroud)