我试图匹配一系列的分隔符,但是当连字符作为字符之前和之后的时候否定:
例如if ( $_SERVER['REMOTE_ADDR'] != "xxx.xxx.xxx.xxx" && $maintenance )
{
//Display Maintenance Page
die(include('maintenance.php'));
}
//Normal stuff
将匹配所有空格和连字符。
我有wi-fi
然而,我希望wi-fi不会成为匹配,因为它之前和之后都有字母字符。 (例如[\u002D\u0020]
)
如何在匹配字符集时否定序列? 此外,是否仅限于拉丁字母字符?引擎是否了解文化,例如阿拉伯语和土耳其语?
编辑: 只是为了进一步解释我想要实现的目标。 我想从句子中收集所有标点符号和特定字符并忽略所有单词(例如 - +#$%等)。
每当有一个带连字符的词(例如最先进的词)时,我希望忽略整个词。 "这是#a%最先进的设计"我打算得到以下集合:"#,%"。
答案 0 :(得分:1)
尝试使用XRegExp
匹配所有带连字符的单词,并在所有其他上下文中匹配和捕获非单词字符:
var s = "this is# a %statè-òf-thè-árt or state-of-the-art design";
var rx = XRegExp("\\p{L}+(?:-\\p{L}+)+|([^\\p{L}\\p{N}_ ])","g");
var res = [];
XRegExp.forEach(s, rx, function(match, i) {
if (match[1]) res.push(match[1]);
});
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/2.0.0/xregexp-all-min.js"></script>
模式匹配:
\\p{L}+(?:-\\p{L}+)+
一个或多个字母(\\p{L}+
)后面跟着一个或多个-
和1+个字母的序列|
- 或([^\\p{L}\\p{N}_ ])
- 第1组捕获空格以外的一个字符_
,字母(\\p{L}
)和数字(\\p{N}
)。 只应将第1组的内容推送到结果数组。