需要使用javascript进行一些模式匹配吗
我有一个用户输入的长字符串。使用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]; 我
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];
}