javascript正则表达式选择带引号的字符串,但不转义引号

An404

原始字串:

some text "some \"string\"right here "

想要得到:

"some \"string\"right here"

我正在使用以下正则表达式:

/\"(.*?)\"/g
威克多·斯特里比尤

使用解析器正确解析字符串

使用JavaScript正则表达式,不可能以正确的双引号开始匹配。您要么匹配一个转义的,要么不匹配正确的双\引号。因此,最安全的方法是使用解析器。这是一个示例:

var s = "some text \\\"extras\" some \\\"string \\\" right\" here \"";
console.log("Incorrect (with regex): ", s.match(/"([^"\\]*(?:\\.[^"\\]*)*)"/g));
var res = [];
var tmp = "";
var in_quotes = false;
var in_entity = false;
for (var i=0; i<s.length; i++) {
  if (s[i] === '\\' && in_entity  === false) { 
     in_entity = true;
     if (in_quotes === true) {
       tmp += s[i];
     }
  } else if (in_entity === true) { // add a match
      in_entity = false;
      if (in_quotes === true) {
         tmp += s[i];
      }
  } else if (s[i] === '"' && in_quotes === false) { // start a new match
      in_quotes = true;
      tmp += s[i];
  } else if (s[i] === '"'  && in_quotes === true) { // append char to match and add to results
      tmp += s[i];
      res.push(tmp);
      tmp = "";
      in_quotes = false;
  } else if (in_quotes === true) { // append a char to the match
     tmp += s[i];
  } 
}
console.log("Correct results: ", res);

不太安全的正则表达式方法

无法将您需要的字符串与延迟点匹配模式匹配,因为它将在第一个字符串之前停止"如果您知道您的字符串在带引号的子字符串之前永远不会有转义的引号,并且您确定\双引号之前没有文字(并且这些条件对于安全使用正则表达式非常严格),则可以使用

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

正则表达式演示

  • " -匹配报价
  • ([^"\\]*(?:\\.[^"\\]*)*) -的0个或更多序列
    • [^"\\]*- 0+无糖\,无"小号
    • (?:\\.[^"\\]*)* -零个或多个序列
      • \\. -任何逃脱的符号
      • [^"\\]*- 0+无糖\,无"小号
  • " -尾随报价

JS演示:

var re = /"([^"\\]*(?:\\.[^"\\]*)*)"/g; 
var str = `some text "some \\"string\\"right here " some text "another \\"string\\"right here "`;
var res = [];
while ((m = re.exec(str)) !== null) {
   res.push(m[1]);
}
document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>"; // Just for demo
console.log(res); // or another result demo

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python正则表达式将带引号的字符串与转义的单引号匹配

来自分类Dev

正则表达式检索带引号的字符串和引号字符

来自分类Dev

正则表达式处理带引号的字符串和双引号英寸

来自分类Dev

使用正则表达式捕获不带引号的双引号内的字符串

来自分类Dev

正则表达式匹配忽略双引号的带引号的字符串

来自分类Dev

正则表达式可以匹配任何带引号的字符串或特定的不带引号的字符串

来自分类Dev

Javascript正则表达式:计算字符串中未转义的引号

来自分类Dev

Golang正则表达式替换不包括带引号的字符串

来自分类Dev

正则表达式查找带引号的字符串中的所有大括号

来自分类Dev

正则表达式以匹配变量或字符串的值(带或不带引号)

来自分类Dev

正则表达式用_(Sublime)替换带引号的字符串中的空格

来自分类Dev

正则表达式查找带引号的字母的字符串

来自分类Dev

正则表达式查找带引号的字符串中的所有大括号

来自分类Dev

无法在ruby中使用正则表达式突出显示带引号的字符串

来自分类Dev

PHP 正则表达式提取带引号和括号的子字符串

来自分类Dev

Ruby正则表达式提取单引号/双引号之间的字符串,其中可能包含转义字符

来自分类Dev

javascript字符串正则表达式替换引号之间的字符串

来自分类Dev

正则表达式-获取引号中的字符串时忽略转义的引号和注释

来自分类Dev

java-正则表达式使用空格分割字符串,但不考虑双引号或单引号

来自分类Dev

java-正则表达式使用空格分割字符串,但不考虑双引号或单引号

来自分类Dev

带有转义单引号的单引号字符串上的Python正则表达式

来自分类Dev

正则表达式使用不带引号的键/值对中的空格分割字符串

来自分类Dev

Java正则表达式选择字符串中的开始和结束引号

来自分类Dev

Java正则表达式选择字符串中的开始和结束引号

来自分类Dev

匹配引号之间的随机字符串正则表达式javascript

来自分类Dev

用于提取双引号和非引号字符串的正则表达式模式Javascript

来自分类Dev

用于提取双引号和非引号字符串的正则表达式模式Javascript

来自分类Dev

如何使用正则表达式匹配单引号或双引号中的字符串

来自分类Dev

正则表达式匹配忽略双引号的双引号字符串

Related 相关文章

  1. 1

    Python正则表达式将带引号的字符串与转义的单引号匹配

  2. 2

    正则表达式检索带引号的字符串和引号字符

  3. 3

    正则表达式处理带引号的字符串和双引号英寸

  4. 4

    使用正则表达式捕获不带引号的双引号内的字符串

  5. 5

    正则表达式匹配忽略双引号的带引号的字符串

  6. 6

    正则表达式可以匹配任何带引号的字符串或特定的不带引号的字符串

  7. 7

    Javascript正则表达式:计算字符串中未转义的引号

  8. 8

    Golang正则表达式替换不包括带引号的字符串

  9. 9

    正则表达式查找带引号的字符串中的所有大括号

  10. 10

    正则表达式以匹配变量或字符串的值(带或不带引号)

  11. 11

    正则表达式用_(Sublime)替换带引号的字符串中的空格

  12. 12

    正则表达式查找带引号的字母的字符串

  13. 13

    正则表达式查找带引号的字符串中的所有大括号

  14. 14

    无法在ruby中使用正则表达式突出显示带引号的字符串

  15. 15

    PHP 正则表达式提取带引号和括号的子字符串

  16. 16

    Ruby正则表达式提取单引号/双引号之间的字符串,其中可能包含转义字符

  17. 17

    javascript字符串正则表达式替换引号之间的字符串

  18. 18

    正则表达式-获取引号中的字符串时忽略转义的引号和注释

  19. 19

    java-正则表达式使用空格分割字符串,但不考虑双引号或单引号

  20. 20

    java-正则表达式使用空格分割字符串,但不考虑双引号或单引号

  21. 21

    带有转义单引号的单引号字符串上的Python正则表达式

  22. 22

    正则表达式使用不带引号的键/值对中的空格分割字符串

  23. 23

    Java正则表达式选择字符串中的开始和结束引号

  24. 24

    Java正则表达式选择字符串中的开始和结束引号

  25. 25

    匹配引号之间的随机字符串正则表达式javascript

  26. 26

    用于提取双引号和非引号字符串的正则表达式模式Javascript

  27. 27

    用于提取双引号和非引号字符串的正则表达式模式Javascript

  28. 28

    如何使用正则表达式匹配单引号或双引号中的字符串

  29. 29

    正则表达式匹配忽略双引号的双引号字符串

热门标签

归档