我試圖在(同時)隔離一個 " 字符:
- 它不在行首
- 它后面沒有字符“;”
- 它前面沒有字符“;”
例如:
行:“Best Before - NO MATCH
行:Best Before";- 不匹配
Line: ;"Best "Before - NO MATCH
線:最佳“之前 - MATCH
我最好(?<![;])([^^])(")(?![;])的解決方案是,但它不能正常作業。
我也試過(?<![;])(")(?![;])了,但這只是部分的(缺少“不是開頭”部分)
我不明白為什么我拼錯了“而不是開頭”。我在哪里想念它?
uj5u.com熱心網友回復:
如果您想允許部分匹配,您可以使用不將字串的開頭斷言到左側的替代來擴展后向查找。
分號[;]不必在方括號之間。
(?<!;|^)"(?!;)
正則運算式演示
如果要匹配左右"沒有出現的'"時間,并且允許后向斷言中的無限量詞:
(?<!^.*;(?=").*|^)"(?!;|.*;")
正則運算式演示
uj5u.com熱心網友回復:
您可以使用 not before by;意味著它也不是該行的第一個字符來簡化事情
[^;]"(?:[^;]|$)
這給你
匹配一個不是 a 的字符;(所以必須有一個字符,因此下一個字符不能是行首)
匹配一個"
匹配不是 a;或行尾的字符
uj5u.com熱心網友回復:
我知道您要求的是正則運算式解決方案,但是幾乎總是,字串也可以使用您正在使用的任何語言的字串方法進行過濾。
為了完整起見,為了表明正則運算式不是您在這里唯一可用的工具,這里有一個使用以下string方法的簡短 javascript:
myString.charAt()myString.includes()
作業示例:
const checkLine = (line) => {
switch (true) {
// DOUBLE QUOTES AT THE BEGINNING
case(line.charAt(0) === '"') :
return console.log(line, '// NO MATCH');
// DOUBLE QUOTES IMMEDIATELY FOLLOWED BY SEMI-COLON
case(line.includes('";')) :
return console.log(line, '// NO MATCH');
// DOUBLE QUOTES IMMEDIATELY PRECEDED BY SEMI-COLON
case(line.includes(';"')) :
return console.log(line, '// NO MATCH');
default:
return console.log(line, '// MATCH');
}
}
checkLine('"Best Before');
checkLine('Best Before";');
checkLine(';"Best "Before');
checkLine('Best "Before');
延伸閱讀:
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/496152.html
標籤:正则表达式
