我想要的结果:
T1 T3 T5 T8 "
=不匹配,因为报价不完整甚至更好,在报价之前匹配字符T1 T3 T5 T8 "T4
=匹配T1 T3 T5,忽略T4 =不是要求,但如果能够实现这一点也会很好T1 T3 T5 T8 "T9"
=仅匹配T1 T3 T5 T8,忽略T9 O2 T3 O5 "T7 T9" O8
=匹配O2 T3 O5 O8,忽略报价中的匹配这是我到目前为止所使用的正则表达式,但如果报价不完整,我就无法使其与所有内容不匹配。
/(^|\b)(t|o)\d+(?=([^"]*"[^"]*")[^"]*$)/gi
答案 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)
答案 2 :(得分:1)
答案 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