正则表达式匹配整个字符串(如果其中没有/没有特定数字)

时间:2018-10-13 06:50:08

标签: regex

我正在尝试找到一种使正则表达式匹配整个分隔字符串的方法,以防它满足以下条件之一:

  1. 字符串不应该包含数字1(作为一个数字,而不是11或12)

  2. 字符串包含数字1(以一位数字表示,不是11或12)

字符串可以类似于以下格式:

1,2,wo,9,5
1
wo,1,11

我尝试了以下正则表达式:

/^.*\b(1)\b.*$
/^((?!1).)*$

我正在尝试匹配整个字符串,如果满足条件之一,我想替换整个字符串。

1 个答案:

答案 0 :(得分:0)

此正则表达式将查找所有出现1的字符串为单个数字:

/^.*\b1\b.*$/

找到匹配项后,可以使用'true'将整个字符串替换为单词String.replace

const strings = ['1,2,wo,9,5','1','wo,1,11'];
strings.map(s => console.log(s.replace(/^.*\b1\b.*$/, 'true')));

如果您只想将1替换为某些内容,则可以使用更简单的正则表达式/\b1\b/。要替换所有事件,请使用g标志:

const strings = ['1,2,wo,1,5','1','wo,1,11'];
strings.map(s => console.log(s.replace(/\b1\b/g, 'true')));

如果您要查找不包含1作为单个数字的字符串,则可以使用负数超前查找,即

^(?!.*\b1\b.*$).*$

,然后再次使用String.replace将整个字符串替换为例如

const strings = ['1,2,wo,9,5','1','wo,1,11','45,x,z,23'];
strings.map(s => console.log(s.replace(/^(?!.*\b1\b.*$).*$/, 'false')));