prefix - regex - 按前缀匹配单词

我试图用以特定字符结尾的前缀来匹配字符串,例如,如果字符串是"abcd"和#结束,那么字符都应该匹配,下面是一些有助于说明该模式的例子:

输入:"ab#"提供true ("ab""abcd"的前缀,并以#结尾)。

输入:"abcd#"提供true ("abcd""abcd"的前缀,并以#结尾)。

输入:"bc#"提供false (因为"bc"不是"abcd"的前缀)。

输入:"ab@"提供false (虽然"ab""abcd"的前缀,但是,它不是以#结尾)。

输入:"ac#"提供false (虽然"ac"包含在"abcd"中,但是,它不是从"abcd"的前缀开始)。

到目前为止,我已经准备好了以下表达式,这些表达式似乎正常:

 
/(abcd|abc|ab|a)#/



 

尽管这是工作的,但是它不实用,因为单词长度n会使表达式变得非常大:


/(n|n-1|n-2| ... |1)#/



有没有办法重写这个表达式,使它更可扩展和简洁?

我尝试(JS )的例子:


const regex = /(abcd|abc|ab|a)#/; 



console.log(regex.test("abcd#")); // true


console.log(regex.test("ab#")); // true


console.log(regex.test("abc#")); // true


console.log(regex.test("abz#")); // false


console.log(regex.test("abc@")); // false

时间:

在这里使用String#startsWithString#endsWith


String input ="abcd";


String prefix ="ab#";



if (input.startsWith(prefix.replaceAll("#$","")) && prefix.endsWith("#")) {


 System.out.println("MATCH");


}


else {


 System.out.println("NO MATCH");


}




var input ="abcd";


var prefix ="ab#";



if (input.startsWith(prefix.replace(/#$/,"")) && prefix.endsWith("#")) {


 console.log("MATCH");


}


else {


 console.log("NO MATCH");


}

尝试^ab?c?d?#$

说明:


`^` - match beginning of a string



`b?` - match match zero or one `b`



演示

以下是我的C#尝试:


 private static bool test(string v)


 {


 var pattern ="abcd#";


 return pattern.Replace("#","").Contains(v.Replace("#",""));



 }



...