18

JavaScript を使用して二重引用符の間のテキストを取得したいと思います。私はオンラインで次のようなものを見つけましtitle.match(/".*?"/);たが、二重引用符の間にテキストがある場合もあれば、引用符がない場合もあります。私が言っているのは、時々、のような文字列を受け取りNeque porro quisquam est qui dolorem ipsum、時には: のような文字列を受け取るということですNeque "porro quisquam est" qui dolorem ipsum。問題は、二重引用符を含むテキストがある場合、それらの間のテキストを取得したいのですが、二重引用符が存在しない場合は、テキスト全体が必要です。また、それが機能しないことを観察しstring.indexOf("\"")ましたが、この問題へのアプローチ方法が本当にわかりません。ありがとう。

4

4 に答える 4

40

試す:

<script>
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 console.log(matches
    ? matches[1]
    : str);
}


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

// Execution of the functions

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" ]
</script>

EDITは、複数の部分文字列の一致に関する破棄された編集の @AshishMaity コメントと、単一引用符 (上記の場合は str3) がある場合の元の破損に関する @JosephCho コメントの両方を考慮して作り直されました。

于 2013-11-05T16:05:39.193 に答える
18

これで試してみてください:

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

正規表現の視覚化

Debuggex デモ

于 2013-11-05T16:05:55.137 に答える
9

単一の正規表現で:

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
于 2013-11-05T16:08:13.870 に答える