我有一個字串,23DGERA@SPK_20W L R FA-2@1 342HSHC@CPU_8PIN INTEL_TEST!@1 2356GHMX@SSD_256G MICRON_CONTENT@2 blablabla
我想做的是用“ ”分割字串,但在 SPK 部分有一個 L R 會中斷該程序。有沒有可以實作我想要的正則運算式?
結果應該是:
23DGERA@SPK_20W L R FA-2@1
342HSHC@CPU_8PIN INTEL_TEST!@2
2356GHMX@SSD_256G MICRON_CONTENT@2
現在我總是得到:
23DGERA@SPK_20W L
R FA-2@1
342HSHC@CPU_8PIN INTEL_TEST!@2
2356GHMX@SSD_256G MICRON_CONTENT@2
我現在正在使用 Javascript .split(' ')。
任何幫助都會得到認可。
uj5u.com熱心網友回復:
您可以使用匹配的正則運算式解決方案:
text.match(/(?:L\ R|[^ ]) /g)
請參閱正則運算式演示。詳情:
(?:- 非捕獲組的開始:L\ R-L R字串|- 或者[^ ]- 除以下以外的任何字符
)- 組結束,出現一次或多次。
請參閱 JavaScript 演示:
var text = '23DGERA@SPK_20W L R FA-2@1 342HSHC@CPU_8PIN INTEL_TEST!@1 2356GHMX@SSD_256G MICRON_CONTENT@2';
console.log(text.match(/(?:L\ R|[^ ]) /g));
ECMAScript 2018 兼容解決方案
如果您想遷移到更現代的 ECMAScript 風格,您可以使用
text.split(/\ (?<!L\ (?=R))/)
這將匹配一個 不是L R字串的一部分。
const text = '23DGERA@SPK_20W L R FA-2@1 342HSHC@CPU_8PIN INTEL_TEST!@1 2356GHMX@SSD_256G MICRON_CONTENT@2';
console.log(text.split(/\ (?<!L\ (?=R))/));
請參閱正則運算式演示。
uj5u.com熱心網友回復:
您可以使用負面后視來排除 前面有 L 的情況
const input = "23DGERA@SPK_20W L R FA-2@1 342HSHC@CPU_8PIN INTEL_TEST!@1 2356GHMX@SSD_256G MICRON_CONTENT@2 blablabla";
console.log(input.split(/(?<!L)\ /))
或負前瞻排除 后跟 R
const input = "23DGERA@SPK_20W L R FA-2@1 342HSHC@CPU_8PIN INTEL_TEST!@1 2356GHMX@SSD_256G MICRON_CONTENT@2 blablabla";
console.log(input.split(/\ (?!R)/))
或兩者的組合:
const input = "23DGERA@SPK_20W L R FA-2@1 342HSHC@CPU_8PIN INTEL_TEST!@1 2356GHMX@SSD_256G MICRON_CONTENT@2 blablabla"
console.log(input.split(/(?<!L)\ (?!R)/))
uj5u.com熱心網友回復:
該字串看起來像一個零件串列,每個零件都有一個數量,例如@1。您可以使用它來識別 要拆分的正確字符。
使用包含@\d ->(?<=@\d )后跟要匹配的字符的后視(轉義,因為 具有特殊含義)給出:
(?<=@\d )\
在代碼中使用它,我們還需要指定g修飾符來匹配所有實體,而不僅僅是第一個。
const str = '23DGERA@SPK_20W L R FA-2@1 342HSHC@CPU_8PIN INTEL_TEST!@1 2356GHMX@SSD_256G MICRON_CONTENT@2'
const items = str.split(/(?<=@\d )\ /g);
console.log(items);
uj5u.com熱心網友回復:
您可以匹配示例資料中的格式,而不是在 a 上進行拆分。
首先匹配包含單個@ 的部分,然后匹配直到第一次出現@后跟一個數字。
請注意,第二場比賽將342HSHC@CPU_8PIN INTEL_TEST!@1代替342HSHC@CPU_8PIN INTEL_TEST!@2
\w @\w [^@]*@\d\b
模式匹配:
\w @\w匹配 1 個單詞字符,@并且匹配1 個單詞字符[^@]*@匹配一個空格,除 之外的可選字符@,然后匹配@\d\b匹配數字和單詞邊界以防止部分匹配
正則運算式演示
const s = "23DGERA@SPK_20W L R FA-2@1 342HSHC@CPU_8PIN INTEL_TEST!@1 2356GHMX@SSD_256G MICRON_CONTENT@2 blablabla";
const regex = /\w @\w [^@]*@\d\b/g;
console.log(s.match(regex));
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/354312.html
標籤:javascript 正则表达式 ecmascript-6
下一篇:是否有查找交易數量的功能?
