簡體   English   中英

使用Javascript進行正則表達式匹配

[英]Regex Matching using Javascript

我的正則表達式有問題。

var validFormat = /^(JD[a-zA-Z0-9]{6}),(.*),(.*)$/;
console.log('JD231SSD, First Name, Last Name'.match(validFormat));

這將導致

["JD231SSD, First Name, Last Name", "JD231SSD", " First Name", " Last Name", index: 0, input: "JD231SSD, First Name, Last Name"]

可以,但是名字和姓氏是可選的,因此我要實現的目標是有效的。

'JD231SSD,名字'

'JD231SSD'

所以我可以得到以下內容:

["JD231SSD, First Name", "JD231SSD", " First Name", index: 0, input: "JD231SSD, First Name"]

["JD231SSD", "JD231SSD", index: 0, input: "JD231SSD"]

我希望我可以使用正則表達式來實現此目的,但不確定是否可行。 因為如果不是,那么我可以嘗試其他解決方案。

謝謝!

var validFormat = /^(JD[a-zA-Z0-9]{6}),?([^,]*),?([^,]*)$/;
^(JD[a-zA-Z0-9]{6})(?:,(.*?)(?:,(.*))?)?$

您可以使用此正則表達式捕獲所有三個。請參見演示。

https://regex101.com/r/uF4oY4/80

您可以使用

^(JD[a-zA-Z0-9]{6})(?:,([^,\n]*))?(?:,([^,\n]*))?$

觀看演示

如果字符串不包含換行符,則\\n不必要。

我用否定的類[^,]替換了(.*) [^,]並在逗號+ [^,]周圍添加了可選的非捕獲組( (?: ... )? )。

 var re = /^(JD[a-zA-Z0-9]{6})(?:,([^,\\n]*))?(?:,([^,\\n]*))?$/gm; var str = 'JD231SSD, First Name, Last Name\\nJD231SSD, First Name\\nJD231SSD'; var m; while ((m = re.exec(str)) !== null) { if (m.index === re.lastIndex) { re.lastIndex++; } document.write("Whole match: " + m[0] + "<br/>"); document.write("ID: " + m[1] + "<br/>"); if (m[2] !== undefined) { document.write("First name: " + m[2] + "<br/>"); } if (m[3] !== undefined) { document.write("Last name: " + m[3] + "<br/>"); } document.write("<br/>"); } 

var validFormat = ^(JD[a-zA-Z0-9]{6})(?:,(.*?)(?:,(.*))?)?$;
console.log('JD231SSD, First Name, Last Name'.match(validFormat));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM