Javascript 使用正则表达式测试字符串匹配,仅接受1和点,但不接受11
我想设置一个regex测试来测试字符串是否为1.1或1.1.1或1.1.1.1等 但我只知道这只接受1和Javascript 使用正则表达式测试字符串匹配,仅接受1和点,但不接受11,javascript,regex,Javascript,Regex,我想设置一个regex测试来测试字符串是否为1.1或1.1.1或1.1.1.1等 但我只知道这只接受1和 /^[1\.]+$/.test(string) 如果我测试1.11.1,它仍然返回true。尝试使用^1(?:\.1)*$: var输入=[“1”、“1.1”、“1.1.1.1”、“1.2.3.4”、“1.11”、“热狗”]; 对于(变量i=0;i”+结果); }如果字符串只接受零和一,但不能包含11,则可以使用负前瞻来断言not11 请注意,您不必转义character类中的 ^(?!
/^[1\.]+$/.test(string)
如果我测试1.11.1,它仍然返回true。尝试使用^1(?:\.1)*$
:
var输入=[“1”、“1.1”、“1.1.1.1”、“1.2.3.4”、“1.11”、“热狗”];
对于(变量i=0;i”+结果);
}
如果字符串只接受零和一,但不能包含11
,则可以使用负前瞻来断言not11
请注意,您不必转义character类中的
^(?!.*11)[.1]+$
const regex=/^(?。*11)[.1]+$/;
[
"1.1",
"1.1.1",
"1.1.1.1",
"...",
"..1111",
"1.1.....",
"...1..1.."
].forEach(s=>{
常数m=正则表达式测试;
如果(m){
log(`Match-->${s}`);
}否则{
log(`No match-->${s}`);
}
})
试试这个
^(?:1\.)+[1]$|^(1)$
如果您不想单独匹配1
^(?:1\.)+[1]$
您可能想在这里考虑使用的另一种方法是构建DFA。由于正则表达式非常简单,因此不需要花费太多精力:
功能检查(a){
让isChecked=true;
设状态=0;
for(设i=0;i arr.forEach((a)=>console.log(check(a))
试试这个^(?:1\)+[1.]$
@VishalSingh您的正则表达式也会匹配1..
,@TimBiegeleisen,如果确定字符串将以1
结尾,那么[1.]
可以用1
替换。这不起作用。如果我运行/1(?:\.1)*/.test('1.11.1'),它仍然返回true。@KennethChan请检查我更新的答案,其中包含更多示例。