努力獲得不捕獲可選引號的作業正則運算式。
下面的代碼和jsfiddle。
https://jsfiddle.net/zx7Lurob/1/
var txt = `#VER B 2000 20190403 "Text" 20190413`; //without quote 2000
var txt2 = `#VER B "2000" 20190403 "Text" 20190413`; //with qutoe 2000
var myRegexp = /(#VER)\s "(. )"|(. )\s (. ?)\s (\d{8})\s "(. )"/g;
do {
var match = myRegexp.exec(txt2);
if (match != null)
{
match.forEach(function(value) {
console.log(value);
});
//console.log(match);
}
} while (match != null);
給出帶有 txt2 參考值的結果。
uj5u.com熱心網友回復:
您可以使用
var myRegexp = /(#VER.*?)\s (?:"([^"]*)"|(\S ))\s (\d{8})\s "([^"]*)"/g;
請參閱正則運算式演示。詳情:
(#VER.*?)- 第 1 組:#VER然后是任何零個或多個字符,除了換行符之外,盡可能少\s- 一個或多個空格(?:"([^"]*)"|(\S ))- 要么",然后是除"(捕獲到組 2 中)之外的任何零個或多個字符,或一個或多個非空白字符(捕獲到組 3 中),\s- 一個或多個空格(\d{8})- 第 4 組:八位數\s- 一個或多個空格"([^"]*)"-",然后是除"(捕獲到組 5 中)之外的任何零個或多個字符,然后是一個"字符。
請參閱 JavaScript 演示:
var txt = `#VER B 2000 20190403 "Text" 20190413`;
var txt2 = `#VER B "2000" 20190403 "Text" 20190413`;
var myRegexp = /(#VER.*?)\s (?:"([^"]*)"|(\S ))\s (\d{8})\s "([^"]*)"/g;
for (var txt of [txt, txt2]) {
do {
var match = myRegexp.exec(txt);
if (match != null)
{
console.log(txt, '=>',
[match[1], match[3] || match[2], match[4], match[5]]);
}
} while (match != null);
}
uj5u.com熱心網友回復:
很難確定是位置航路點還是
欄位分隔符。
我猜它實際上是兩者的混合體。
在這種情況下,一個簡單的匹配
欄位兩側和捕獲外部的可選引號應該可以解決問題。
/(\#VER.*)[ \t] "?(. ?)"?[ \t] (\d{8})[ \t] "(. )"/
https://jsfiddle.net/Lj4rzo2s/
( \#VER .* ) # (1)
[ \t]
"?
( . ? ) # (2)
"?
[ \t]
( \d{8} ) # (3)
[ \t]
"
( . ) # (4)
"
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/358702.html
標籤:javascript 正则表达式
上一篇:只需要正則運算式中的一個數字
下一篇:如何從第二個孩子中洗掉逗號(,)
