注意:我標記了 ,google-app-script因為那是我作業的地方,我不知道是否有一些不同的命名法對每個人在回答問題時都很重要。
0-0目前,要查找出現在固定字符'FT '和之間的分數(在下面的示例中是) ')',我這樣做:
var text = 'So its (just 1-2) amazing (FT 0-0) its ours final score';
var length = text.length;
var find_str_ft = 'FT ';
var find_str_ft_length = find_str_ft.length;
var position = text.indexOf(find_str_ft);
var text_right = text.substring(position find_str_ft_length, length);
var find_str_close_bar = ')';
var position_close_bar = text_right.indexOf(find_str_close_bar);
var text_left_close_bar = text_right.substring(0, position_close_bar);
Logger.log(text_left_close_bar);
日志:
0-0
我知道這是一種過時的方法,我想知道是否有更高級和正確的選項可以使用,即使它不需要這么多步驟和/或這么多代碼行。
uj5u.com熱心網友回復:
正則運算式將使這變得非常容易:
let text = 'So its (just 1-2) amazing (FT 0-0) its ours final score';
let match = text.match(/\(FT\s ([^)] )\)/);
let result = match[1];
您要匹配左側:
\(FT\s
這意味著匹配(FT和 1 個或多個空格字符。
然后你想匹配你想要的實際資料:
([^)] )
這匹配并捕獲任何不是)(我們匹配的結尾)并且多次出現的字符。
然后你匹配右側。
\)
這就是字面上的)性格。
uj5u.com熱心網友回復:
與正則運算式匹配
function lfunko() {
let s = "So its (just 1-2) amazing (FT 0-0) its ours final score";
let m = s.match(/(?<=just )([^\)] )|(?<=FT )([^\)] )/g);
Logger.log('First: %s Second: %s', m[0],m[1]);
}
Execution log
3:26:04 PM Notice Execution started
3:26:05 PM Info First: 1-2 Second: 0-0
3:26:05 PM Notice Execution completed
利用兩個積極的看法一起 ored。
如果您希望在這樣的比賽中看到一些真正的專業知識,只需添加一個正則運算式標簽,您就會看到一些真正的正則運算式大師。
為您添加了正則運算式標簽。等待@Wiktor Stribi?ew 回答,然后再做出最終選擇。
uj5u.com熱心網友回復:
您可以使用捕獲組并將數字與連字符匹配,其中捕獲組 1 的值m[1]在示例代碼中表示為:
\(FT\s (\d -\d )\)
解釋
\(匹配(FT\s匹配 FT 和 1 個空格字符(\d -\d )捕獲組 1,匹配 1 個數字-1 個數字\)匹配)
const text = 'So its (just 1-2) amazing (FT 0-0) its ours final score';
const m = text.match(/\(FT\s (\d -\d )\)/);
if (m) {
console.log(m[1]);
}
/g如果使用該標志可以出現更多情況:
const text = 'So its (just 1-2) amazing (FT 0-0) its ours final score, and not (FT 1-1)';
console.log(Array.from(text.matchAll(/\(FT\s (\d -\d )\)/g), m => m[1]));
uj5u.com熱心網友回復:
還有一個很好的衡量標準......
const text = 'So its (just 1-2) amazing (FT 7-10) its ours final score';
const regexScore = /FT\s \d -\d /ig;
const regexDigits = /\d /g
const found = text.match(regexScore);
const score = found[0].match(regexDigits);
console.log(found);
console.log(score);
uj5u.com熱心網友回復:
我確信它不是絕對最好的,我可以想象它不切實際的地方,但我喜歡的許多用例的通用解決方案如下:
var str = 'BeginingoflongstringFToranystringScoreorwhateverwewant)oranystringEndoflongstring';
var first_filter = 'FToranystring';
var second_filter = ')oranystring';
var desired_string = str.slice(
str.indexOf(first_filter) first_filter.length,
str.indexOf(second_filter),
);
console.log(desired_string);
并且使用您的特定資料,我們使用lastIndexOf, 而不是indexOf因為它是您的字串中的非唯一短語而進行了一次更改。要普遍使用它,最好只搜索兩個唯一字串之間的字串:
var str = 'So its (just 1-2) amazing (FT 0-0) its ours final score';
var first_filter = 'FT';
var second_filter = ')';
var desired_string = str.slice(
str.indexOf(first_filter) first_filter.length,
str.lastIndexOf(second_filter),
);
console.log(desired_string);
或者,在這種情況下,您可以使用“) i”,而不僅僅是使用結束符“)”:
var str = 'So its (just 1-2) amazing (FT 0-0) its ours final score';
var first_filter = 'FT';
var second_filter = ') i';
var desired_string = str.slice(
str.indexOf(first_filter) first_filter.length,
str.indexOf(second_filter),
);
console.log(desired_string);
在任何情況下,它都需要完全了解您的輸入字串,因此很少是理想的。
uj5u.com熱心網友回復:
替代方法:
除了使用regex之外,您還可以將
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/458776.html
