0

我有一个由多个类组成的返回字符串:

"xxx1sbu xxx2sdf xxx1sef xxx1sb1 xxx1su xxx1s1 dxxx1s xxx1sdfg xxx1sbf"

我需要正则表达式来搜索字符串并根据以下条件查找类:

1) 课程以 'xxx1s' 开头

2) 类别不超过 7 个字符(字母和数字),不包括后面的空格 ('xxx1sbu')

3) 如果类 ('xxx1sbu') 后面有一个空格,那么它也会被找到,以便将其删除。

然后我使用正则表达式将找到的类替换为

var classesReplaced = classesString.replace(regex, "")

该字符串应如下所示:

"xxx2sdf dxxx1s xxx1sdfg"

到目前为止,我想出的最好的是:

RegExp: /\bxxx1s([a-z1-9])([a-z1-9])(\s)|\bxxx1s([a-z1-9])([a-z1-9])\b/g
pattern: \bxxx1s([a-z1-9])([a-z1-9])(\s)|\bxxx1s([a-z1-9])([a-z1-9])\b

我还尝试使用 javascript 来构建表达式,但它不断剥离 '\b':

var classId = 'xxx1s';
var regex2 = new RegExp('\b'+ classId +'([a-z1-9])([a-z1-9])(\s)|\b'+ classId +'([a-z1-9])([a-z1-9])\b','g');

有没有更好的方法来写这个??我对正则表达式的理解不是很好!

先感谢您

4

2 回答 2

2

我认为这是您需要的命令和正则表达式:

NewString = OldString.replace( /\bxxx1s\S{0,2}\b\s?/, "" );

这是如何分解的:

  • \b是要替换的部分的开头词边框。
  • xxx1s是您要删除的基本文本。
  • \S{0,2}(大写 S)查找长度在 0 到 2 个字符之间的任何非空白;添加到上面的项目中,它确保只找到 7 个或更少字符的项目。
  • \b是结束词边界。
  • \s?(小写 s) 查找尾随空格;使其?成为可选,因此不会跳过该系列中的最后一项。
于 2013-11-08T21:04:38.620 回答
0

这是您应该使用的正则表达式:

var regex = /((?:\s*(xxx1s)\w{1,2})(?=\W))|(xxx1sbu )/g;
于 2013-11-08T20:32:18.547 回答