【问题标题】:Regex: Match desired chars at the beginning/end of string正则表达式:在字符串的开头/结尾匹配所需的字符
【发布时间】:2018-02-13 19:08:52
【问题描述】:

我需要一个正则表达式来完全匹配设置在字符串开头或结尾的'AB' 字符,并将它们替换为''。注意:它不应该匹配该字符集的部分,只有当它全部出现时。

  1. 所以如果我有'AB Some AB company name AB',它应该返回'Some AB company name'
  2. 如果我有'Balder Storstad AB',它应该只删除'AB',而不是开头的'B',因为它不是整个'AB',只是它的一部分。

我尝试的是:

name.replace(/^[\\AB]+|[\\AB]+$/g, "");

直到在字符串的开头或结尾遇到单个“A”或“B”都可以。如果测试字符串是'Balder Storstad AB',它匹配开头的'B'和结尾的'AB',并返回'alder Storstad'。它应该在开头或结尾跳过单个 'B' 或单个 'A'

我的正则表达式有什么问题?

编辑:

我忘了添加这个。如果测试字符串是: "ABrakadabra AB" 或 "Some text haha​​hAB" 或 "ABAB text text textABAB"

“AB”不应匹配,因为它们不是单独的“AB”组,而是其他单词的一部分。

【问题讨论】:

  • 正则表达式中的方括号用于字符类:它将匹配任何列出的字符。在您的情况下,反斜杠(出于某种原因)、AB。通过添加+ 量词,您还可以删除任何其他匹配的字符,直到找到不匹配的字符。例如,“ABBBAAA\BBB\ text”会变成“text”。

标签: javascript regex


【解决方案1】:

var rgx = /(^AB\s+)|(\s+AB$)/g;
console.log(
    "AB Some AB company name AB".replace(rgx, "")
);
console.log(
    "Balder Storstad AB".replace(rgx, "")
);
console.log(
    "ABrakadabra AB".replace(rgx, "")
);
console.log(
    "Some text hahahAB".replace(rgx, "")
);
console.log(
    "ABAB text text textABAB".replace(rgx, "")
);
解释 :
(^AB\s+) // AB at the beginning (^) with some spaces after it
| // Or
(\s+AB$) // AB at the end ($) with some spaces before it

【讨论】:

  • 如果测试字符串为“ABABSome AB company name AB”则失败,因为它匹配第一个“AB”并返回“ABsome AB company name”。只有当它是单独的“AB”而不是其他单词的开头或结尾部分时,它才应该匹配。
  • 所以对于"ABABSome AB company name AB",您希望它返回"Some AB company name"
  • 我想返回 "ABABSome AB company name" 。如果它在开头或结尾而不是其他单词的一部分,则仅匹配“AB”。在这个测试字符串中,“AB”是“ABABSome”开头的一部分,应该跳过它。如果“ABalder Storstad ABAB”也一样——它不应该匹配,因为没有单独的“AB”。
  • 非常感谢,现在好像可以了。
  • @basic 作为帖子的作者,您可以接受对您帮助最大的最佳答案,方法是勾选投票计数下方的复选标记,使其变为绿色。
猜你喜欢
  • 2016-12-07
  • 2015-04-27
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 2023-01-02
  • 1970-01-01
  • 2016-11-07
相关资源
最近更新 更多