如何匹配包含特殊字符的整个单词?
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
_testData
_test3Data
%data%
test%BIN%data
test%BIN%data
te$t&$#@daTa
如果我答对了,您可以在字符串中搜索开始的 % 和结束的 %。假设字符串只有一种可能,您可以使用 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;
}
如果支持 lookbehinds,您可以使用 alternation 来匹配以下划线或数字开头,或者在其他情况下匹配零次或多次非空白字符,至少是特殊字符使用字符 class 后跟匹配零次或多次而不是空白字符。
(?<=\s|^)(?:[\d_]\S+|\S*[%@#$]\S*)(?=\s|$)
说明
(?<=\s|^)
正向后视断言左侧是空白字符或字符串的开头
(?:
开始非捕获组
[\d_]\S+
匹配数字或下划线后跟匹配一次或多次非空白字符
|
或
\S*[%@#$]\S*
匹配零次或多次非空白字符,然后匹配字符中指定的内容 class 并再次匹配零次或多次非空白字符
)
关闭非捕获组
(?=\s|$)
断言后面是空白字符或字符串结尾的正向前瞻
我只使用一个模式来匹配单词。条件是以下之一:
第一个字母包含数字或下划线,或
单词中至少有一个特殊字符(不包括下划线):
应该匹配
3testData
3test_Data
_testData
_test3Data
%data%
test%BIN%data
te$t&$#@daTa
不应该匹配
test_Data3
到目前为止,我已经通过以下方式成功匹配了其中一些:
[\p{^Alpha}]\S+
除了单词里面有特殊字符的单词
3testData
3test_Data
_testData
_test3Data
%data%
test%BIN%data
test%BIN%data
te$t&$#@daTa
如果我答对了,您可以在字符串中搜索开始的 % 和结束的 %。假设字符串只有一种可能,您可以使用 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;
}
如果支持 lookbehinds,您可以使用 alternation 来匹配以下划线或数字开头,或者在其他情况下匹配零次或多次非空白字符,至少是特殊字符使用字符 class 后跟匹配零次或多次而不是空白字符。
(?<=\s|^)(?:[\d_]\S+|\S*[%@#$]\S*)(?=\s|$)
说明
(?<=\s|^)
正向后视断言左侧是空白字符或字符串的开头(?:
开始非捕获组[\d_]\S+
匹配数字或下划线后跟匹配一次或多次非空白字符|
或\S*[%@#$]\S*
匹配零次或多次非空白字符,然后匹配字符中指定的内容 class 并再次匹配零次或多次非空白字符
)
关闭非捕获组(?=\s|$)
断言后面是空白字符或字符串结尾的正向前瞻