正则表达式:在具有多语言支持的匹配模式之后获取数字

时间:2019-03-13 22:07:51

标签: javascript regex

预期收入/产出

  • 输入:浪琴(Longines),苏黎世的Barth零售,编号。 22127,机芯编号5770083,
  • 所需的输出:5770083 我将仅以此为基础建立数字:{"Movement Number": 5770083}

我相信我需要对每个字符串运行多个正则表达式,因为我需要了解以下信息:

  • 哪个标题属于哪个字符串,例如movement no.= 5770083
  • 同一title将使用多种不同的语言,例如:
    • 机芯编号变体:
    • 动作编号
    • 运动标志。Numérotée
    • MVT
    • 珠宝#
    • Werk-Nr。

当前正则表达式/movement no. ([^\s]+)/ 使用上面的正则表达式,它还将拾取,

它也不区分大小写。

测试字符串

  

浪琴。极好的稀有不锈钢防水   带黑色表盘和原装盒的计时码表\ n已签名   浪琴(Longines),苏黎世巴特(Barth)零售,编号。 22127,机芯编号5770083,   案号46,约1941年\ nCal。 13 ZN镍制杠杆机芯,17   珠宝,带有阿拉伯数字的黑色表盘,外轨五分钟   师和速动刻度,两个辅助刻度盘指示   恒定秒数和30分钟的记录,大循环   防水型表壳,带平边框,下垂的表耳,螺钉   后盖,表带,表壳和机芯中的两个圆形计时按钮   由制造商签名,由制造商和零售商签名的表盘\ n37毫米。直径。

测试字符串法语

  

MONTER BRACELET D'HOMME CHRONOGRAPHE EN或PAR浪琴表\ n \ nDe forme   隆德,cadilla noiràchiffres arabes,cadran auxiliaire pour les   秒和三分之二的时间,   mocanementmécanique13 Z N,1960年发行,poids brut:44.49 gr。,monture   zh或jaune 18K(750)\ n \ nCadran Longines,运动编号。 3872616,喜欢   deboîteno。 5872616 \ n蒙特勒维耶兹圣母大教堂   地方人民保护组织,tels leprotégées   鳄鱼,伊尔·涅桑特·帕斯·旺德斯·阿韦克·莱·蒙特·梅斯·伊尔斯·桑特   avec celles-ci。佳士得的装置和保存器   手镯aur leur collecte par les acheteur

4 个答案:

答案 0 :(得分:2)

您可以使用

\b((?:Movement|mouvement) no\.|mouvement signés\.Numérotée|no|MVT|jewels #|Werk-Nr\.) (\d+)

https://regex101.com/r/thL0wt/1

从一个单词边界开始,然后在一个捕获组内,在一个数字之前想要的所有不同可能的短语之间交替-然后,匹配一个空格,并在另一个组中捕获数字字符。您想要的结果将在第一个和第二个捕获组中。

const input = `Longines. A very fine and rare stainless steel water-resistant chronograph wristwatch with black dial and original box\nSigned Longines, retailed by Barth, Zurich, ref. 22127, movement no. 5770083, case no. 46, circa 1941\nCal. 13 ZN nickel-finished lever movement, 17 jewels, the black dial with Arabic numerals, outer railway five minute divisions and tachymetre scale, two subsidiary dials indicating constant seconds and 30 minutes register, in large circular water-resistant-type case with flat bezel, downturned lugs, screw back, two round chronograph buttons in the band, case and movement signed by maker, dial signed by maker and retailer\n37 mm. diam.

MONTRE BRACELET D'HOMME CHRONOGRAPHE EN OR, PAR LONGINES\n\nDe forme ronde, le cadran noir à chiffres arabes, cadran auxiliaire pour les secondes à neuf heures et totalisateur de minutes à trois heures, mouvement mécanique 13 Z N, vers 1960, poids brut: 44.49 gr., monture en or jaune 18K (750)\n\nCadran Longines, mouvement no. 3872616, fond de boîte no. 5872616\nVeuillez noter que les bracelets de montre pouvant être en cuirs exotiques provenant d'espèces protégées, tels le crocodile, ils ne sont pas vendus avec les montre même s'ils sont exposés avec celles-ci. Christie's devra retirer et conserver ces bracelets avant leur collecte par les acheteur`;
const matches = {};
let match;
const pattern = /\b((?:Movement|mouvement) no\.|mouvement signés\.Numérotée|no|MVT|jewels #|Werk-Nr\.) (\d+)/gmi;
while (match = pattern.exec(input)) {
  matches[match[1]] = match[2];
  // or, if you only want a single object:
  const obj = {
    [match[1]]: match[2]
  };
}
console.log(matches);

答案 1 :(得分:1)

运动编号具体来说,您将希望此正则表达式摆脱逗号:

movement no. ([^\s\W]+)

关于语言,除非RegExp对象允许字符串替换,否则我只能想到一组if语句,它们执行要测试的适当术语。抱歉,在该领域没有更多帮助。

答案 2 :(得分:1)

您正在使用否定字符类[^\s]+,该类与所有空格都匹配。因此,如果您不想想要匹配另一个字符,即逗号,,则将其添加到此类:[^\s,]

对于不需要的任何字符,您可以遵循相同的逻辑。

答案 3 :(得分:0)

        socket;
        connectionOptions = {
        "transports": ["websocket"]
        };

       constructor(public adminService: AdminService,) {
       /* Socket connection singleton*/
       this.socket = io(this.adminService.apiUrl, this.connectionOptions);
       }

       my component code:



 ngOnInit() {
        this.socket = this.socketConnection.socket;
        this.paginationData = this.paginationService.paginationData;
        this.getGuests();
       }