【问题标题】:Finding an alternative solution for look-around assertion寻找环视断言的替代解决方案
【发布时间】:2020-10-06 07:26:17
【问题描述】:

我有一个字符串,其中包含我要查找的标题(-title 或 -t 开关)。

some_string -title "myTitle" some_more_string

为此,我创建了一个正则表达式,它在开发过程中以及在 Android + Windows 设备上都有效。在发布用户抱怨的页面后,该页面显示 iOS 设备的空白页面。在检查和谷歌搜索之后,似乎提到的标题检查是原因。 (Works in Chrome, but breaks in Safari: Invalid regular expression: invalid group specifier name /(?<=\/)([^#]+)(?=#*)/)

我的标题正则表达式使用环视断言,据报道这对 iOS 不利。

import { Pipe, PipeTransform } from '@angular/core';

const titleExpression: RegExp = /(?<=\-t(itle)? ")[^"]+/;

@Pipe({
  name: 'findTitle'
})
export class FindTitlePipe implements PipeTransform {
  transform(value: string): string {
    return value ? value.match(titleExpression)[0] : '';
  }
}

但是,我对替代解决方案有点迷茫。请指教。


编辑:

我现在决定使用拆分方法。 (这也有待改进,但那是另一回事了)

transform(value: string): string {
    const tokens: string[] = value.split(' ');
    const foundAt: number = tokens.findIndex(token => ['-t', '-title'].includes(token));

    return foundAt === -1 ? '' : tokens[foundAt + 1].replace('"', '');
  }

【问题讨论】:

    标签: javascript angular regex typescript safari


    【解决方案1】:

    我建议你使用一个简单的命名捕获:

    const str = 'some_string -title "myTitle" some_more_string'
    const titleExpression = /-t(itle)?\s*"(?<title>[^"]+)"/;
    const title = str => str ? str.match( titleExpression ).groups.title : '';
    console.log( title( str ) );

    【讨论】:

    • 感谢您的建议。我决定使用拆分方法。
    猜你喜欢
    • 1970-01-01
    • 2016-06-04
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多