正则表达式匹配具有特定 start/end 的字符串

Regex to match a string with specific start/end

我正在尝试匹配所有出现的以 -- 开头并以单个 space </code>.</p> 结尾的字符串 <p>我正在处理的文件是 OpenVPN 手册,我想要提到的所有选项(例如 <code>--option)。

我正在使用 Sublime Text,根据其备忘单,它们支持 \A\Z 来表示字符串的开始和结束。

因此,我认为 \A--.* \Z 应该匹配所有字符串,以 -- 开始并以 .

结束

然而,这根本不匹配。

什么正则表达式可以匹配所有以双破折号开头并以 space 字符结尾的字符串?应匹配与其位置无关的任何事件。

foo.*bar

在这里您将匹配以 foo 开头和以 bar 结尾的所有内容

然后根据你的情况尝试

"--.* "

刚刚在 sublime text 3 中测试它有效

我认为您的问题由于使用了 string 而引起了一些混乱。您可能想查看计算机科学的用法(例如 here)。您正在寻找的是单词,以 -- 开头并以 space 结尾(或者可能是行尾)。

你可以在这里使用(?:^|(?<=\s))--\S+

  • (?:^|(?<=\s)) 检查前面是否有 space 或一行的开头(使用后视)
  • --\S+ 匹配双 - 和一个或多个非 space 字符
    • 请注意,这将始终以 space 或行尾
    • 结束

另一种可能性是(?:^|(?<=\s))--\w+(?=\s|$)。它在这里查找一系列单词字符(字母、数字、下划线),并通过前瞻确保它以 space 或行尾结束。

您可以做的一件事是将这些添加到 .prototype 并创建您自己的 startsWith()endsWith() 函数

通过这种方式,您可以执行 string.startsWith("starts with this");string.endsWith("ends with this"); 我使用 substring 而不是 indexOf,因为它无需扫描整个字符串即可更快。此外,如果您将空字符串传递给它们 return false 的函数。 参考linkHere

    if ( typeof String.prototype.startsWith != 'function' ) {
  String.prototype.startsWith = function( str ) {
    return str.length > 0 && this.substring( 0, str.length ) === str;
  }
};

if ( typeof String.prototype.endsWith != 'function' ) {
  String.prototype.endsWith = function( str ) {
    return str.length > 0 && this.substring( this.length - str.length, this.length ) === str;
  }
};