需要用javascript做一些模式匹配

时间:2011-08-28 17:39:44

标签: javascript

我有一个用户输入的长字符串。使用javascript我想得到第一句的文本,如果它以问号结束。有一种简单的方法可以做到这一点吗?

例如:

var myText1 = "What is your name? My name is Michelle."

我需要回复:“你叫什么名字”

var myText2 = "this is a test. this is a test."

我需要回复:“不适用”

3 个答案:

答案 0 :(得分:2)

正规救援:

var res = str.match(/^([^.]+)\?/);
var output = (res == null) ? 'n/a' : res[1];

答案 1 :(得分:0)

我很担心这会有多实用,但这应该有用。

var text = "this is a question? this is some text.";

var split1 = text.split(/[.?]+/); // splits the text at "." and "?"
var split2 = text.split(/[?]+/); // splits the text at "?"


// if the first element in both arrays is the same, the first sentence is a question.
var result = (split1[0] == split2[0]) ? split1[0] : "n/a";

答案 2 :(得分:0)

根据美国英语语法规则,句子以.?!结尾,但如果句子以引号结尾,则"将跟随(他对我说,“你好吗?”)。这算是一个问题吗?句子本身是一个引用问题的陈述,所以我认为答案是否定的。这样可以更轻松,因为我们只需要考虑?后面没有"

鉴于上述情况,这是我的解决方案:

function startIsQuestion( str ) {
  var m = str.match(/^[^.!]+[?][^"]/);
  if (!m || 
      m[0].indexOf('.') >= 0 ||
      m[0].indexOf('!') >= 0 ||
      m[0].indexOf('?"') >= 0) return "n/a";
  return m[0];
}

我认为它并不完全健壮,但我不确定你的完整要求,它应该给你一个良好的开端。

See demo