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

时间:2018-07-11 13:35:03

标签: javascript regex

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

条件1 ,搜索字符串应位于单词开头,即单词前无特殊字符。

  • abc 应该与abc开头的字符串相匹配,就像abcdef在句子中的任何地方。

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

条件2 如果字符串前面带有一些特殊字符,那么它也应该在特殊字符之前有一些文本。

  • abc 应该在test_abcdef中匹配-因为'abc'之前是'test _'

  • abc _abcdef中不匹配-因为它以'_'开头,而_

  • 前没有任何文本

如果字符串在字符串test@_abcdeftest__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

2 个答案:

答案 0 :(得分:0)

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

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

RegEx Demo

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

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

重新计算abc索引