正则表达式:匹配字符串开头/结尾的特定字符

7
我需要一个正则表达式,用于匹配字符串的开头或结尾恰好为'AB'字符集,并将其替换为''。注意:它不应该匹配该字符集的部分内容,只有当它作为整个字符集出现时才匹配。
  • 如果我有'AB Some AB company name AB',它应该返回'Some AB company name'。
  • 如果我有'Balder Storstad AB',它应该仅删除'AB'而不是开头的'B',因为它不是完整的'AB',只是其中的一部分。
我尝试过的正则表达式是:
name.replace(/^[\\AB]+|[\\AB]+$/g, "");

在只有字符串开头或结尾出现单个"A"或"B"的情况下,它是可以正常工作的。如果测试字符串是'Balder Storstad AB',则会匹配开头的'B'和结尾的'AB',然后返回'alder Storstad'。应该跳过字符串开头或结尾的单个'B'或单个'A'

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

编辑:

我忘记添加这个了。如果测试字符串是: "ABrakadabra AB" or "Some text hahahAB" or "ABAB text text textABAB"

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


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

6

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, ""));

说明:
Explanation:
(^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”本身。 - user3681549
所以对于 "ABABSome AB 公司名称 AB",您希望它返回 "Some AB 公司名称"? - DjaouadNM
我想返回“ABABSome AB 公司名称”。只有在开头或结尾匹配“AB”,而不是其他单词的一部分。在这个测试字符串中,“AB”是“ABABSome”的一部分,应该被跳过。同样,如果是“ABalder Storstad ABAB”,它不应该匹配,因为没有单独的“AB”。 - user3681549
非常感谢,现在看起来没问题了。 - user3681549

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接