我想使用JavaScript在双引号之间获取文本。我在网上找到了像title.match(/".*?"/);
这样的东西,但问题是有时我在双引号之间有文字,但有时候没有引号。我的意思是,有时我收到的字符串如:Neque porro quisquam est qui dolorem ipsum
,有时字符串如:Neque "porro quisquam est" qui dolorem ipsum
。问题是,当我有包含双引号的文本时,我想要检索它们之间的文本,但是当它们不存在时,我想要整个文本。
另外我观察到string.indexOf("\"")
不起作用,我真的不知道如何处理这个问题。感谢。
答案 0 :(得分:33)
尝试:
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
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" ]
编辑重新设计,考虑到有关匹配多个子字符串的丢弃编辑中的@AshishMaity注释,以及@JosephCho关于原始分解的注释,以防有单引号(str3中的上面的案例)
答案 1 :(得分:14)
答案 2 :(得分:8)
在一个正则表达式中:
var m = s.match(/(?:"[^"]*"|^[^"]*$)/)[0].replace(/"/g, "");
<强> TEST:强>
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
答案 3 :(得分:1)
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));