繁体   English   中英

Javascript正则表达式,用于搜索具有多个特殊字符(非空格)的单词中的字符串

[英]Javascript regular expression to search a string in word having multiple special characters (non space)

要求是在以下条件下查找给定字符串中是否存在搜索字符串。

条件1搜索字符串应在单词的开头找到,即在单词之前没有特殊字符。

  • abc应该匹配以abcdef开头的abc字符串,在句子中的任何位置。

  • xabcdef abc不匹配,因为它不是以'abc'开头

条件2如果字符串以某些特殊字符开头,则在特殊字符之前还应该有一些文本。

  • abc应该在test_abcdef匹配-因为'abc'之前是'test_'

  • abc_abcdef不匹配-因为它以“ _”开头,而_之前没有任何文本

如果字符串在字符串test@_abcdeftest__abcdef具有多个特殊字符,则在正则表达式下面找不到abc

在正则表达式中,不确定如何在' (?<= [A-Za-z0-9] [^ A-Za-z0-9])abc '中添加量词,其中[^ A-Za-z0-9]为检查单个非字母数字字符。

在reqex (?<=... )添加0个或多个特殊字符的语法是什么

在线正则表达式测试器中 尝试过的正则 表达式

/^(?<![^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

您可以在此处应用所有断言而无需更改:

/(?<![a-z0-9])(?<!^[^a-z0-9])(?<!\s[^a-z0-9])abc/igm

正则演示

此正则表达式在匹配abc之前有3个断言:

  1. (?<![a-z0-9]) :前一个字符不是字母数字时,匹配失败
  2. (?<!\\s[^a-z0-9]) :如果我们有一个非字母数字字符而没有一些非空格字符,则匹配失败。
  3. (?<!^[^a-z0-9]) :当我们在行首有一个非字母数字字符时,匹配失败

另请注意,Java语言中的向后支持仍然仅限于新的浏览器。

由于正则表达式不允许变量长度位于断言之后,因此我认为您不能只匹配'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)重新计算abc索引: abc_index = whole_regexp_index + length(regexp_matched_string) - length(abc)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM