我想檢查一個字串是否與以下模式匹配
有一個文本包含在兩個之間,"并且每個文本可以通過;附加來分隔到另一個文本;是強制性的
我嘗試使用正則運算式/"(.*?)";?/但無法使其作業
在下面的代碼片段中test3回傳true但不應與正則運算式匹配
我不知道這是我的正則運算式還是我嘗試正則運算式的方式
const regex = /"(.*?)";?/;
const test = `"hello"; "world";`;
const test2 = `"hello"; "world"`;
const test3 = `"hello; "world"`;
const test4 = `"hello"; world`;
const test5 = `"hello""world"`;
//should be true
console.log("test1",regex.test(test));
console.log("test2",regex.test(test2));
//should be false
console.log("test3",regex.test(test3));
console.log("test4",regex.test(test4));
console.log("test5",regex.test(test5));
uj5u.com熱心網友回復:
/^"[^"]*"(?:\s*;\s*"[^"]*") ;?$/
---2---
---------3---------
-4
……可以分解成……
/^ ... $/"[^"]*"(?:\s*;\s*"[^"]*");?
......然后轉化為......
- 在新行開始和行結束之間......
- 匹配一個雙引號,后跟一個可選的字符序列,每個字符不是雙引號,后跟一個雙引號。
( ... )將以下匹配分組但不捕獲它(?: ... )并強制此模式至少出現一次(?: ... )......在該組中......- 匹配可選空格 (WS)、分號和另一個可選 WS 的序列,后跟已經用 /under 描述的模式
(2)。
- 匹配可選空格 (WS)、分號和另一個可選 WS 的序列,后跟已經用 /under 描述的模式
- 允許整個匹配以無分號或僅以一個分號結束。
const regex = /^"[^"]*"(?:\s*;\s*"[^"]*") ;?$/;
const test1 = `"hello"; "world";`;
const test1a = `"hello" ; "world" ;"world"; "world"`;
const test2 = `"hello" ; "world"`;
const test2a = `"hello";"world" ; "world";"world"`;
const test3 = `"hello; "world"`;
const test4 = `"hello"; world`;
const test5 = `"hello""world"`;
const test6 = `"hello ; world;";"hello ;world"`;
const test6a = `"hello ;world;" "hello; world"`;
const test6b = `"hello; world"`;
//should be true
console.log("test1", regex.test(test1));
console.log("test1a", regex.test(test1a));
console.log("test2", regex.test(test2));
console.log("test2a", regex.test(test2a));
console.log("test6", regex.test(test6));
//should be false
console.log("test3", regex.test(test3));
console.log("test4", regex.test(test4));
console.log("test5", regex.test(test5));
console.log("test6a", regex.test(test6a));
console.log("test6b", regex.test(test6b));
.as-console-wrapper { min-height: 100%!important; top: 0; }
uj5u.com熱心網友回復:
看來您想匹配分號分隔的字串文字,這意味著您可以使用
const sl = String.raw`"[^"\\]*(?:\\[^][^"\\]*)*"`;
const regex = new RegExp(String.raw`^${sl}(?:\s*;\s*${sl})*;?$`);
const test = `"hello"; "world";`;
const test2 = `"hello"; "world"`;
const test3 = `"hello; "world"`;
const test4 = `"hello"; world`;
const test5 = `"hello""world"`;
//should be true
console.log("test1",regex.test(test));
console.log("test2",regex.test(test2));
//should be false
console.log("test3",regex.test(test3));
console.log("test4",regex.test(test4));
console.log("test5",regex.test(test5));
正則運算式^${sl}(?:\s*;\s*${sl})*;?$匹配
^- 字串的開始${sl}- 字串文字模式(?:\s*;\s*${sl})*- 零個或多個;用零個或多個空格包圍的序列,然后是字串文字模式;?- 一個可選的;字符(\s*如果您需要立即匹配尾隨空格,請添加)$- 字串的結尾。
該"[^"\\]*(?:\\[^][^"\\]*)*"模式匹配
"- 一個"字符[^"\\]*- 除"和之外的零個或多個字符\(?:\\[^][^"\\]*)*- 零次或多次出現\,然后是任何字符,然后是零或多個除"and 之外的字符\"- 一個"字符。
uj5u.com熱心網友回復:
它匹配前兩種情況:
\"(.*)?\";?\s{1}\"(.*)?\";?
例子:
const regex = /\"(.*)?\";?\s{1}\"(.*)?\";?/;
const test = `"hello"; "world";`;
const test2 = `"hello"; "world"`;
const test3 = `"hello; "world"`;
const test4 = `"hello"; world`;
const test5 = `"hello""world"`;
//should be true
console.log("test1",regex.test(test));
console.log("test2",regex.test(test2));
//should be false
console.log("test3",regex.test(test3));
console.log("test4",regex.test(test4));
console.log("test5",regex.test(test5));
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/348217.html
標籤:javascript 正则表达式 细绳 比较
