检查文本'ABC'它的前面和后面应该只有一个数字,后面跟着一个空格

Check if the text 'ABC' is there it should be preceded and succeeded by a numeric only, followed by a space

本文关键字:空格 一个 数字 ABC 文本 前面 检查 有一个      更新时间:2023-09-26

我需要一个正则表达式,它应该会在以下中失败

  1. text1 abc
  2. abc 1ed1
  3. 文本1 abc 1ed1

它应该只通过像这样的结构

  1. 11231 abc 23435

格式:xxx abc yyy

xxx,yyy=仅限任意长度的数字

abc=固定字符串,如果没有出现,则应忽略它。如果出现,则应采用特定格式。

我已经尝试了下面的正则表达式。如果前面有,则通过,并且仅在没有任何单个数字的情况下成功。但在上述问题上运气不佳。

'b(('D+[ ]'bABC'b)|('bABC'b[ ]'D+))    

CHAT详细信息

我没有确切的绳子。这是一个用户输入。当输入值包含类似"abc"的内容时,我们应该在两边都有一个数字。否则,当它不包含"abc"时,我们就很好(可能是其他一些验证(。

几个例子:

123 abc (match) 
abc 1234 (match) 
xyz abc (match) 
abc xyz (match) 
xyz32 abc xyz23 (match) 
xyz32 abc 34523 (match) 
1234 abc xyz23 (match) 
12322 abc 1111(pass, we are good).

所有可以是一个子字符串,但新单词,即不是单词的一部分

'd+'sabc+'s'd+

请参阅https://regex101.com/r/gxgEGH/1用于解释

'b'd+'s+'w+'s+'w+'b

console.log('text1 abc abc 1ed1 text1 abc 1ed1 11231 abc 23435'.match(/'b'd+'s+'w+'s+'w+'b/g));

在JS中使用纯regex无法实现这一点,因为它不支持检查abc前面是否没有一个仅由数字组成的完整单词所需的无限宽查找。一种工作方法可以是:使用交替组将数字内的abc捕获为完整单词,并只匹配abc为完整单词的其他情况。然后,检查捕获组是否匹配,如果匹配,则没有匹配项。否则,你就有对手了。

/'b('d+ abc 'd+)'b|'babc'b/

详细信息

  • 'b('d+-前导字边界(之前可以是字符串的开头或非单词字符(1+位数字(也可以是第1组的开头(
  • abc -abc硬编码值,周围有空格
  • 'd+)'b-后面跟一个尾随单词边界的数字(这些数字后面不能出现单词字符-字母、数字或下划线((第1组结束(
  • |-或
  • 'babc'b-一个完整的单词abc

请参阅regex演示。请注意,最后一个匹配还包含一个捕获组#1。

var regex = /'b('d+ abc 'd+)'b|'babc'b/;
var strs = ['123 abc', 'abc 1234', 'xyz abc', 'abc xyz', 'xyz32 abc xyz23', 'xyz32 abc 34523', '1234 abc xyz23', '12322 abc 1111'];
for (var i=0; i<strs.length; i++) {
  var m = strs[i].match(regex);
  if (m && m[1])
    console.log(strs[i] + " is FALSE");
  else if (m)
    console.log(strs[i] + " is TRUE");
}