正则表达式匹配引号外的字符串,如果引号不完整,则不匹配任何内容
Regex Match String Outside of Quotes, if the quote is incomplete, do not match anything
我想要的结果:
T1 T3 T5 T8 "
= 不匹配,因为引用不完整甚至更好,匹配引用前的字符
1a. 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
您可以进行两步验证:
a = YourString
a.match(/\"[^\"]+\"/) ? a.replace(/([^\"]*)\".*\"([^\"]*)/,"") : ""
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(/([^\"]*)\".*\"([^\"]*)/,"") : a.replace(/([^\"]*)\"[^\"]*/,"")
试试这个例子:
https://regex101.com/r/bA7oP0/1
/([^\"]*)\".*\"([^\"]*)/gi
你可以先做一个 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
对于您发布的内容,请使用此模式
"[^"\r\n]*"|"[^"\r\n]*$|(\w+)
并检查子模式#1
Demo
我想要的结果:
T1 T3 T5 T8 "
= 不匹配,因为引用不完整甚至更好,匹配引用前的字符
1a.T1 T3 T5 T8 "T4
= 匹配 T1 T3 T5,忽略 T4 = 不是必需的,但如果这也能实现就好了T1 T3 T5 T8 "T9"
= 只匹配T1 T3 T5 T8,忽略T9O2 T3 O5 "T7 T9" O8
= 匹配 O2 T3 O5 O8,忽略引号内的匹配项
这是我目前使用的正则表达式,但如果引用不完整,我无法让它与所有内容都不匹配。
/(^|\b)(t|o)\d+(?=([^"]*"[^"]*")[^"]*$)/gi
您可以进行两步验证:
a = YourString
a.match(/\"[^\"]+\"/) ? a.replace(/([^\"]*)\".*\"([^\"]*)/,"") : ""
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(/([^\"]*)\".*\"([^\"]*)/,"") : a.replace(/([^\"]*)\"[^\"]*/,"")
试试这个例子:
https://regex101.com/r/bA7oP0/1
/([^\"]*)\".*\"([^\"]*)/gi
你可以先做一个 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
对于您发布的内容,请使用此模式
"[^"\r\n]*"|"[^"\r\n]*$|(\w+)
并检查子模式#1
Demo