使用Javascript'正则表达式匹配整个单词,但有一些限制

时间:2016-10-27 22:51:59

标签: javascript regex

我正在尝试创建一个可以从给定字符串中提取仅包含字母数字字符的所有单词的正则表达式。

Yes
yes absolutely
#no
*NotThis
orThis-- 
Good *Bad*
1ThisIsOkay2 ButNotThis2) 

应该提取的词语:是的,是的,绝对的,好的,1ThisIsOkay2

Here是我迄今为止所做的工作:

/(?:^|\b)[a-zA-Z0-9]+(?=\b|$)/g

我发现this表达式在Ruby中有效(有一些调整),但我无法将其转换为Javascript正则表达式。

2 个答案:

答案 0 :(得分:1)

使用/(?:^|\s)\w+(?!\S)/g匹配字符串/空格的开头和另一个空格或字符串结尾之间的1个或多个字符:



var s = "Yes\nyes absolutely\n#no\n*NotThis\norThis-- \nGood *Bad*\n1ThisIsOkay2 ButNotThis2)";
var re = /(?:^|\s)\w+(?!\S)/g;
var res = s.match(re).map(function(m) { 
  return m.trim(); 
});
console.log(res);




或另一种变体:



var s = "Yes\nyes absolutely\n#no\n*NotThis\norThis-- \nGood *Bad*\n1ThisIsOkay2 ButNotThis2)";
var re = /(?:^|\s)(\w+)(?!\S)/g;
var res = [];
while ((m=re.exec(s)) !== null) {
  res.push(m[1]);
}
console.log(res);




模式详情

  • (?:^|\s) - 字符串或空格的开头(消耗,这就是代码段1中需要trim()的原因)
  • \w+ - 一个或多个单词字符(在代码段2中,捕获到用于填充结果数组的第1组)
  • (?!\S) - 如果单词字符后面没有非空格字符,那么否定前瞻会使匹配失败。

答案 1 :(得分:1)

您可以(其中df是您的字符串)来匹配所有字词:

df.columns = [(df.columns[i][0])+'_'+(datadf_pos4.columns[i][1]) for i in range(len(df.columns))]

如果您想进行替换,可以这样做:

s