正则表达式匹配字符串在报价之外,如果报价不完整,则不匹配任何内容

时间:2016-03-14 14:23:41

标签: javascript jquery regex expression

我想要的结果:

  1. T1 T3 T5 T8 " =不匹配,因为报价不完整甚至更好,在报价之前匹配字符
    1A。 T1 T3 T5 T8 "T4 =匹配T1 T3 T5,忽略T4 =不是要求,但如果能够实现这一点也会很好
  2. T1 T3 T5 T8 "T9" =仅匹配T1 T3 T5 T8,忽略T9
  3. O2 T3 O5 "T7 T9" O8 =匹配O2 T3 O5 O8,忽略报价中的匹配
  4. 这是我到目前为止所使用的正则表达式,但如果报价不完整,我就无法使其与所有内容不匹配。

    /(^|\b)(t|o)\d+(?=([^"]*"[^"]*")[^"]*$)/gi
    

4 个答案:

答案 0 :(得分:1)

您可以进行两步验证:

a = YourString
a.match(/\"[^\"]+\"/) ? a.replace(/([^\"]*)\".*\"([^\"]*)/,"$1$2") : ""

a='T1 T3 T5 T8 "'
# ""

a='O2 T3 O5 "T7 T9" O8'
# "O2 T3 O5  O8"

a='T1 T3 T5 T8 "T9"'
# "T1 T3 T5 T8 "

<强>更新
要涵盖不需要的案例,只需添加另一个条件

a.match(/\"[^\"]+\"/) ? a.replace(/([^\"]*)\".*\"([^\"]*)/,"$1$2") : a.replace(/([^\"]*)\"[^\"]*/,"$1")

答案 1 :(得分:1)

试试这个例子:

https://regex101.com/r/bA7oP0/1

 /([^\"]*)\".*\"([^\"]*)/gi

答案 2 :(得分:1)

您发布的内容使用此模式

"[^"\r\n]*"|"[^"\r\n]*$|(\w+)

并检查子模式#1
Demo

答案 3 :(得分:0)

您可以执行replace,然后执行条件split

// case 1
var str = 'O2 T3 O5 "T7 T9" O8';
var r = str.replace(/\s*"[^"]*"/g, '');
var m;

if (str != r)
   m = r.split(/\s+/);

console.log(m);
//=> ["O2", "T3", "O5", "O8"]

// Case 2
var str = 'O2 T3 O5 "';
var r = str.replace(/\s*"[^"]*"/g, '');
var m;

if (str != r)
   m = r.split(/\s+/);

console.log(m);
//=> undefined