正则表达式匹配字符集但否定序列

时间:2016-10-21 14:10:41

标签: javascript regex

我试图匹配一系列的分隔符,但是当连字符作为字符之前和之后的时候否定:

例如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%最先进的设计"我打算得到以下集合:"#,%"。

1 个答案:

答案 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组的内容推送到结果数组。