要求是在以下条件下查找给定字符串中是否存在搜索字符串。
条件1 ,搜索字符串应位于单词开头,即单词前无特殊字符。
abc 应该与abc
开头的字符串相匹配,就像abcdef
在句子中的任何地方。
abc 在xabcdef
中不应该匹配,因为它不是以'abc'开头
条件2 如果字符串前面带有一些特殊字符,那么它也应该在特殊字符之前有一些文本。
abc 应该在test_abcdef
中匹配-因为'abc'之前是'test _'
abc 在_abcdef
中不匹配-因为它以'_'开头,而_
如果字符串在字符串test@_abcdef
或test__abcdef
中有多个个特殊字符,则在正则表达式下面找不到 abc 。
在正则表达式中不确定如何在'(?<= [A-Za-z0-9] [^ A-Za-z0-9])abc '中添加量词,其中< strong> [^ A-Za-z0-9] 正在检查单个非字母数字字符。
在reqex (?<=... )
中添加0个或多个特殊字符的语法是什么?
正则表达式已尝试在Online Regex Tester
中/^(?<![^A-Za-z0-9])abc|(?<=[A-Za-z0-9][^A-Za-z0-9])abc|(?<=\ )abc/g
示例文本:
abcdef abcdef _abcdef xabcdef test_abcdef test__abcdef abc
答案 0 :(得分:0)
您可以在此处应用所有断言而无需更改:
/(?<![a-z0-9])(?<!^[^a-z0-9])(?<!\s[^a-z0-9])abc/igm
此正则表达式在匹配abc
之前有3个断言:
(?<![a-z0-9])
:如果前一个字符不是字母数字,则匹配失败(?<!\s[^a-z0-9])
:如果我们有一个非字母数字字符而没有一些非空格字符,则匹配失败。(?<!^[^a-z0-9])
:如果在行首出现非字母数字字符,则匹配失败还请注意,JavaScript中的向后支持仍然仅限于新的浏览器。
答案 1 :(得分:0)
由于正则表达式不允许变量长度位于断言之后,因此我认为您不能只匹配'abc',但同时丢弃诸如“ _abc”“ __abc”“ ___ abc”,“ ____ abc”等内容。
我建议分两个步骤进行操作:
首先,尝试将所有必需的情况与正则表达式匹配,而不要限制自己仅匹配'abc'
(?:(?!abc[^a-zA-Z0-9\s]+)[a-zA-Z0-9]+[^a-zA-Z0-9\s]+|^|\s)(abc)
https://regex101.com/r/bAo05D/3
然后,只需使用abc_index = whole_regexp_index + length(regexp_matched_string) - length(abc)