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