I would like to get the text between double quotes using JavaScript. I found online something like title.match(/".*?"/);
but the thing is that sometimes I have text between double quotes but sometimes there are no quotes. What I am saying is that sometimes I receive strings like: Neque porro quisquam est qui dolorem ipsum
and sometimes strings like: Neque "porro quisquam est" qui dolorem ipsum
. The thing is, when I have text containing double quotes I want to retrieve the text between them but when they aren't present, I'd like the whole text.
Also I have observered that string.indexOf("\"")
does not work and I don't really know how to approach this problem. Thanks.
Asked
Active
Viewed 4.4k times
23

Teo
- 3,394
- 11
- 43
- 73
4 Answers
44
Try:
<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 reworked to take into account both @AshishMaity comment in a discarded edit about matching more than one substring, and @JosephCho comment about the original breaking in case there is a single quote (str3 in the case above)
-
A simple and effective solution. Thanks! – Teo Nov 05 '13 at 16:23
-
This solution tosses an error if there is only one quotation mark! Is there a more robust solution? – Joseph Cho Jun 22 '18 at 20:49
10
In a single regex:
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

anubhava
- 761,203
- 64
- 569
- 643
-
yeah, it works like a charm but I want the text without the " " .. any idea on how the regex should be modified in order to get rid of the " " ? – Teo Nov 05 '13 at 16:12
-
1
3
split() function can be used get value in double quote
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));

Manasi
- 765
- 6
- 17