Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要使用javascript进行一些模式匹配吗_Javascript - Fatal编程技术网

需要使用javascript进行一些模式匹配吗

需要使用javascript进行一些模式匹配吗,javascript,Javascript,我有一个用户输入的长字符串。使用javascript,如果第一个句子以问号结尾,我希望得到它的文本。有没有一个简单的方法可以做到这一点 例如: var myText1 = "What is your name? My name is Michelle." 我需要回复:“你叫什么名字?” 我需要返回:“不适用”正则表达式以进行救援: var res = str.match(/^([^.]+)\?/); var output = (res == null) ? 'n/a' : res[1]; 我

我有一个用户输入的长字符串。使用javascript,如果第一个句子以问号结尾,我希望得到它的文本。有没有一个简单的方法可以做到这一点

例如:

var myText1 = "What is your name? My name is Michelle."
我需要回复:“你叫什么名字?”

我需要返回:“不适用”

正则表达式以进行救援:

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

我不知道这有多实际,但这应该行得通

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";

根据美国英语语法规则,句子以
结尾,但如果句子以引号结尾,那么后面会跟着一个
”(他对我说,“你好吗?”)。这算是一个问题吗?这个句子本身就是一个引用问题的语句,所以我假设答案是否定的。这使它更容易,因为我们只需要解释
,后面不跟

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

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];
}
我不认为它是完全健壮的,但我不确定您的完整需求,它应该给您一个良好的开端


取决于您希望它的可靠性。对于你来说,什么构成了一个句子?必须是以“.”或“?”结尾的第一段文本。我不需要做一个很强的测试,因此,即使是字符串“abc 1.和xx.”也是一个句子“abc 1”,那么你如何处理“顺便问一下,你叫什么名字?”?(一般缩写)我会将其处理为“btw”。它返回“n/a”或“你好,威洛斯比先生?”如果文本没有
(例如:如果文本是
“hello”
,结果绝对是
“hello”
),尽管OPs对句子的定义是“必须是以字符结尾的第一个文本块。或者?”。我个人认为整个前提是有缺陷的,需要一个更复杂的方法。但这对所要求的是有效的。
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];
}