我正在尝试使用javascript的正则表达式从文本中获取单词但是收缩应该被视为单个单词:“不能”应该保持“不能”而不是“可以”和“t”。
我试过了:
var text = "I'd like to make it work."
var words = text.match(/\w+/g);
但它在“我”中无效。
如何将单引号作为单个单词处理,而不是两个单词?
答案 0 :(得分:1)
另一种方法是做一个否定的比赛。您可以在字符类中添加不想匹配的内容。字符类^
内的插入符[]
被认为是否定操作符。
var text = "I'd like to make it work."
var words = text.match(/[^\s?!.]+/g);
console.log(words); // => [ 'I'd', 'like', 'to', 'make', 'it', 'work' ]
正则表达式:
[^\s?!.]+ any character except: whitespace (\n, \r, \t, \f, and " "),
'?', '!', '.' (1 or more times)
答案 1 :(得分:0)
var text = "I'd like to make it work."
var words = text.split(' ');
返回[“我”,“喜欢”,“转”,“制造”,“它”,“工作”。]
<强> EDITED 强>
对不起,ChiChou的评论是正确的
var words = text.match(/[A-Za-z0-9_\']+/g);
它的工作方式与预期相同
答案 2 :(得分:0)
如果要匹配域和其他类似于点的对象,而不是连字符分隔符,则可以按如下方式修改@ hwnd的解决方案:
text.match(/[^*"\s?!\(\)]*[^*"\s?!.,\(\)]/g);
句点(例如,在句子末尾)不会包含在单词中,但像stackoverflow.com这样包含其中的点的字词将作为单个单词返回。
自动忽略双引号。单引号也可以被忽略,但只是失去了识别像'Tis(如'如此甜蜜以至于信任耶稣...... )或像学生'这样的所有权等词语的能力/ em>的。完美地解析所有单词需要在正则表达式的能力之外进行一些理解,但是在大多数情况下,这些解决方案中的任何一个都能很好地完成工作。
以下正则表达式对英语更有效,除非JavaScript不支持\w
的语言环境,我会小心在任何可能的国际化语境中使用它。
/[^\s!"<>\(\)\[\]\{\}?`]*[\w']/g
(例如,它正确识别此答案中的每个单词,除了“eg”,它错误地认为尾随.
是一个句点并忽略它。)
这个最终的RE也适用于任何语言:
[^\s!"<>\(\)\[\]\{\}?`]*[^\s!"<>\(\)\[\]\{\}?`.,:]
答案 3 :(得分:0)
尝试以下正则表达式:
/[\w']*[^\d\W]/g