web-dev-qa-db-ja.com

二重引用符で囲まれたJavaScriptテキスト

JavaScriptを使用して二重引用符で囲まれたテキストを取得したいと思います。オンラインでtitle.match(/".*?"/);のようなものを見つけましたが、二重引用符で囲まれたテキストがあることもあれば、引用符がないこともあります。私が言っているのは、_Neque porro quisquam est qui dolorem ipsum_のような文字列を受け取ることと、_Neque "porro quisquam est" qui dolorem ipsum_のような文字列を受け取ることです。問題は、二重引用符を含むテキストがある場合、それらの間のテキストを取得したいが、それらが存在しない場合は、テキスト全体が欲しいということです。また、string.indexOf("\"")が機能せず、この問題への対処方法がわかりません。ありがとう。

17
Teo

試してください:

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];
}

その後

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

extractFirstText(str2);
//porro quisquam est

extractFirstText(str3);
//Neque "porro

extractFirstText(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" ]

[〜#〜] edit [〜#〜]複数の部分文字列の一致に関する破棄された編集の@AshishMaityコメントと、存在する場合の元の改行に関する@JosephChoコメントの両方を考慮に入れるように修正一重引用符(上記の場合はstr3)

37
gotofritz

これで試してください:

/"((?:\\.|[^"\\])*)"/

Regular expression visualization

Debuggexデモ

16
bukart

単一の正規表現では:

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

テスト:

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
8
anubhava

split()関数を使用して、二重引用符で値を取得できます

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

function findFirstOccurance(str){
  const matches = str.split('"');
  return matches[1] ? matches[1] : str;
}


console.log(findFirstOccurance(str1));
console.log(findFirstOccurance(str2)); 
1
Manasi