繁体   English   中英

如何匹配包含特殊字符的整个单词?

[英]How to match a whole word containing special characters?

我只使用单个模式就能匹配单词。 条件是以下之一:

  • 它的第一个字母包含数字或下划线,或者

  • 单词中至少有一个特殊字符(不包括下划线):

应该匹配

3testData
3test_Data
_testData
_test3Data
%data%
test%BIN%data
te$t&$#@daTa

不应该匹配

test_Data3

到目前为止,我已经设法通过以下方式匹配其中一些:

[\p{^Alpha}]\S+

除单词中包含特殊字符的单词外

3testData
3test_Data
_测试数据
_test3Data
%数据%
测试 %BIN%data
测试 %BIN%data
te $ t&$#@ daTa

如果lookbehinds支持,你可以使用一个交替以匹配匹配零个或多个要么开始用下划线或数字,或在其他情况下,匹配零次或多次不使用空格,至少使用字符类特殊字符后跟再次不是空白字符。

(?<=\\s|^)(?:[\\d_]\\S+|\\S*[%@#$]\\S*)(?=\\s|$)

正则表达式演示

说明

  • (?<=\\s|^)断言左侧的正向表达式是空格字符还是字符串的开头
  • (?:启动非捕获组
    • [\\d_]\\S+匹配数字或下划线,然后匹配一次或多次而不是空格字符
    • | 要么
    • \\S*[%@#$]\\S*匹配零次或多次而不是空白字符,然后匹配字符类中指定的内容,并且再次匹配零次或多次非空白字符
  • )关闭非捕获组
  • (?=\\s|$)正向断言,断言其后是空白字符或字符串结尾

如果我的问题正确,则您将搜索字符串的开头%和结尾%。 假设通过字符串只有一种可能,则可以使用indexOf和lastIndexOf,如下所示

function searchTagIn(symbol, str){ let chk=str.indexOf(symbol);
 if(  chk>-1){
  if(str.lastIndexOf(symbol)!=chk){
   return str.substring(chk,str.lastIndexOf(symbol);
  }
 }return;
}

暂无
暂无

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

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